Jest to najpopularniejszy sposób (wydaje mi się) sprawdzania, czy wartość znajduje się w tablicy:
for (int x : array)
{
if (x == value)
return true;
}
return false;
Jednak w książce, którą czytałem wiele lat temu, prawdopodobnie przez Wirtha lub Dijkstry, powiedziano, że ten styl jest lepszy (w porównaniu do pętli while z wyjściem w środku):
int i = 0;
while (i < array.length && array[i] != value)
i++;
return i < array.length;
W ten sposób dodatkowy warunek wyjścia staje się jawną częścią niezmiennika pętli, nie ma żadnych ukrytych warunków i wychodzi z pętli, wszystko jest bardziej oczywiste i bardziej w sposób ustrukturyzowany. Generalnie wolałem ten ostatni wzór, gdy tylko było to możliwe, i użyłem for
pętli do iteracji tylko od a
do b
.
A jednak nie mogę powiedzieć, że pierwsza wersja jest mniej przejrzysta. Może jest to jeszcze bardziej zrozumiałe i łatwiejsze do zrozumienia, przynajmniej dla bardzo początkujących. Więc wciąż zadaję sobie pytanie, które z nich jest lepsze?
Może ktoś może podać uzasadnienie na korzyść jednej z metod?
Aktualizacja: To nie jest kwestia punktów zwrotnych z wielu funkcji, lambdów lub znalezienia elementu w tablicy jako takiej. Chodzi o to, jak pisać pętle z bardziej złożonymi niezmiennikami niż pojedyncza nierówność.
Aktualizacja: OK, widzę sens ludzi, którzy odpowiadają i komentują: Włączyłem tutaj pętlę foreach, która sama w sobie jest już znacznie bardziej przejrzysta i czytelna niż pętla while. Nie powinnam tego robić. Ale jest to również interesujące pytanie, więc zostawmy je takie, jakie są: pętla foreach i dodatkowy warunek w środku, lub pętla while z wyraźną niezmiennikiem pętli i późniejszym warunkiem. Wydaje się, że wygrywa pętla foreach z warunkiem i wyjściem / przerwaniem. Stworzę dodatkowe pytanie bez pętli foreach (dla listy połączonej).
collection.contains(foo)