1. Porównanie cykli: for
vs while
Pętli while
można używać we wszystkich przypadkach, w których polecenie lub grupa poleceń musi zostać wykonana wiele razy. Ale spośród wszystkich przypadków jeden przypadek wyróżnia się szczególnie.
Dzieje się tak w przypadku, gdy programista (autor programu) z góry wie, ile razy ma zostać wykonana jego pętla. Zwykle rozwiązuje się to przez wprowadzenie specjalnej zmiennej licznika, a przy każdej iteracji pętli zmienna jest zwiększana (lub zmniejszana) o 1
.
Wszystko wydaje się działać tak, jak powinno, ale nie jest to zbyt wygodne. Przed pętlą ustawiamy wartość początkową zmiennej licznika, następnie w warunku sprawdzamy czy osiągnęła już wartość końcową. Ale zwykle zmieniamy to na samym końcu ciała pętli.
Co jeśli ciało pętli jest duże? A może mamy wiele zagnieżdżonych pętli? Generalnie w takich przypadkach chciałbym zebrać wszystkie te informacje o zmiennej licznika w jednym miejscu. Tak powstała pętla w Javie for
. Nie wygląda to też na trudne.
for (statement 1; condition; statement 2)
{
block of statements
}
Jeśli pętla while
w nawiasach miała tylko warunek, to for
dodawane były dwa polecenia oddzielone średnikiem.
W rzeczywistości wszystko jest prostsze niż się wydaje: kompilator zamienia pętlę for
w zwykłą pętlę, while
taką jak ta:
statement 1;
while (condition)
{
block of statements
statement 2;
}
Lub lepiej zademonstruj na przykładzie: dwa poniższe przykłady są identyczne.
opcja 1 | Opcja 2 |
---|---|
|
|
Po prostu wzięliśmy i zebraliśmy w jednym miejscu cały kod dotyczący zmiennej licznika - i
.
polecenie1 w pętli for
jest wykonywane tylko raz przed samą pętlą (widać to w drugim przykładzie)
Polecenie2 jest wykonywane tyle samo razy co treść pętli, ale będzie wykonywane za każdym razem po wykonaniu całej treści pętli
2. Gdzie używany jest cyklfor
Pętla for
jest prawdopodobnie najczęściej używaną pętlą for w Javie. Jest używany wszędzie, ponieważ to po prostu bardziej zrozumiała i wygodna forma pisania pętli while
dla programistów. Prawie każdą pętlę while
można przekształcić w pętlę for
.
Przykłady:
pętla while | dla pętli |
---|---|
|
|
|
|
|
|
|
|
|
|
Zwróć uwagę na ostatni przykład. Brakuje tam instrukcji pracy z licznikiem pętli. Brak licznika - brak komend.
Java pozwala nie pisać w cyklu for
„komenda zainicjowania licznika” i „komenda zmiany licznika”. I nawet warunku wyrażenia cyklu nie da się zapisać.
3. Niuanse korzystania z cyklufor
Ważna uwaga dotycząca używania pętli for
oraz operatorów break
i continue
.
Instrukcja break
w pętli for
działa tak samo jak w pętli while
- powoduje natychmiastowe zakończenie pętli. Ale continue
prowadzi to do pominięcia ciała pętli, ale nie statement 2
(co zmienia licznik pętli).
Przyjrzyjmy się ponownie, w jaki sposób for
i są powiązane while
.
for (statement 1; condition; statement 2)
{
block of statements
}
statement 1;
while (condition)
{
block of statements
statement 2;
}
Jeśli for
wywołasz instrukcję w bloku poleceń pętli continue
, pozostała część bloku poleceń zostanie pominięta, ale polecenie2 (które działa ze zmienną licznika cykli for
) będzie nadal wykonywane.
Wróćmy do naszego przykładu pomijania liczb podzielnych przez 7.
Ten kod zostanie zapętlony | Ten kod będzie działał świetnie |
---|---|
|
|
Kod wykorzystujący pętlę while
nie zadziała - nigdy nie przekroczę 7. Ale kod z pętlą for
będzie działał dobrze.
4. Porównanie pętli for: Java vs Pascal
Nawiasem mówiąc, Pascal ma również pętlę For
. Występuje na ogół w prawie wszystkich językach programowania. Dopiero w Pascalu jest to dużo jaśniejsze. Przykłady:
Pascala | Jawa |
---|---|
|
|
|
|
|
|
GO TO FULL VERSION