Zależy od języka i preferencji danego programisty. Oraz jaki mamy cel, po co chcemy iterować.
W JS:
jeśli chcę przejechać przez elementy tablicy, to robię zwykle .forEach
:
Kopiuj
someArray.forEach(el => { console.log(el); });
jest to bardziej "skrótowe" niż pętla for
i niektórzy się tym zachwycili i zaczęli rzucać teksty "nie używam już pętli for".
Tylko, że to krótkowzroczne myślenie. Pętla for
pozwala na większą elastyczność. Np. iterację od tyłu (przydatne przy usuwaniu elementów). Albo dowolną iterację, nie tylko po tablicach. Również za pomocą for
można przerwać iterację w trakcie, co też bywa zaletą. Np. jeśli element znaleziony, to nie musisz dalej przeszukiwać...
...ale z kolei do szukania elementów dodano metody find
, findIndex
, findLast
, findLastIndex
.
Dalej. Jeśli chcemy zamienić jedną tablicę w drugą, to mamy od tego map
, które całkiem wygodnie pozwala na takie rzeczy.
myArray.filter().map()...
Taki kod również jest przydatny - najpierw przefiltrować tablicę i potem przemapować.
(jednak to, że tak można zrobić w pewnych przypadkach nie kasuje przydatności pętli for
czy innych sposobów iteracji).
Dalej mamy reduce
, które też jest przydatne jeśli chcemy zrobić z wielu elementów jeden (np. policzyć sumę elementów).
Natomiast ponieważ reduce
jest dość elastycznym sposobem iteracji, to ludzie zaczęli tego nadużywać. W szczególności zobaczysz kody, które mutują pierwszy argument - np. dodają coś do obiektu, to częsty pattern:
Kopiuj
someArray.reduce((acc, v, i) => { acc[v] = i; return acc }, {})
chociaż to hak i używanie czegoś niezgodnie z przeznaczeniem (bo reduce kojarzy się z programowaniem funkcyjnym, więc mutacja trochę nie bardzo pasuje). Chociaż nie jestem radykałem, sam tak robiłem. Nawiasem mówiąc powyższy przykład z reduce można i tak zapisać krócej używając Object.fromEntries
:
Kopiuj
Object.fromEntries(someArray.map((v,i) => [v,i]))
Jeśli chcemy utworzyć obiekt na podstawie tablicy.
W innych przypadkach użycie reduce
można przepisać np. do zwykłej pętli for
czy użycia metody .forEach
. I często jest to bardziej czytelne (reduce
ma dziwną skłonność zaciemniania kodu, bo często ludzie tam wrzucają imperatywny kod, ale pisany tak, żeby imitować programowanie funkcyjne).
Więc jeśli już ograniczyć się w używaniu czegoś, to sugerowałbym ostrożność w użyciu reduce
;) można oczywiście używać, ale łatwo napisać coś mało czytelnego używając reduce.
Długi post wyszedł, ale i tak tylko liznąłem temat. Bo poruszyłem tylko iterację po tablicach (a można jeszcze iterować po obiektach, iterablach itp.) oraz przez pętlę for
mam na myśli for (init; cond; after)
a w JS jest jeszcze pętla for... in
, for... of
czy for await...of
.
Anyway, nie daj sobie wmówić głupot, że pętla for
jest be. Wszystko zależy co robisz.
No i jeszcze są pętle while
czy do while
, które też są przydatne, chociaż rzadziej (ale np. przy implementacji różnych algorytmów mogą się przydać).
for stosuje się "w przedszkolu". Natomiast "profesjonalne" podejście to kod typu
o chui xD. Gdzie tak piszą albo mówią, żeby unikać tych miejsc.kosmonauta80kosmonauta80break
:D zdradzę ci sekret - niektórzy po prostu chcą się dowartościować rzucając takie teksty.kosmonauta80