Pętla while
W JavaScript jak w większości powszechnie używanych języków programowania występuje pętlawhile
Na początku zostaje sprawdzony warunek, jeśli jest on prawdziwy zostają wykonane instrukcje. Po ich wykonaniu zostaje ponownie sprawdzony warunek i cała procedura się powtarza. Pętla zostaje przerwana, gdy warunek nie jest prawdziwy. Sprawdzanie prawdziwości warunku odbywa się na zasadach opisanych w poprzedniej części kursu. Można powiedzieć, że pętla wykonuje się dopóki warunek jest prawdziwy, stąd pochodzi jej nazwa.
Napisz program, który wypisze na ekran wszystkie liczby od 1 do 101 podzielne przez 5. Każda liczba powinna być wypisana w nowej linii.
var i = 5;
while(i < 101) {
console.log(i);
i += 5;
};
Pętla do while
Pętlawhile
jest bardzo użyteczna, pojawiają się jednak sytuacje, gdy nie jest ona najbardziej optymalnym rozwiązaniem. Załóżmy, że chcemy pobrać od użytkownika jakieś dane. Jak wiadomo takie dane nie zawsze zostają podane poprawnie, np. jeśli pobieramy od użytkownika jego nowe hasło, to nie może ono być pustym ciągiem znaków. Działanie takiego prostego programu można by oprzeć na pętliwhile
.
1234 | pobierz_dane();while(dane_niepoprawne){pobierz_dane();} |
---|---|
Można uznać, że powyższy przykład napisany jest w pseudokodzie, chodzi nam w tej chwili wyłącznie o zobrazowanie pewnego problemu. Działanie tego przykładu wygląda następująco: pobieramy dane od użytkownika, a następnie sprawdzamy czy są niepoprawne, jeśli tak to ponownie pobieramy dane i znowu je sprawdzamy. Jeśli natomiast dane są poprawne, to przechodzimy do dalszej części programy.
Powyższy przykład jest bardzo prosty, ale już w nim widać, że dwa razy powtarzamy pewną część kodu, co praktycznie zawsze jest złym rozwiązaniem. Poznajmy pętlędo while
która pomoże nam ulepszyć nasz kod.
123 | do{pobierz_dane();}while(dane_niepoprawne); |
---|---|
Ten przykład wygląda dużo lepiej niż poprzedni. Jak się pewnie domyślasz, pętlado while
najpierw wykonuje blok kodu, a następnie sprawdza warunek, jeśli jest on prawdziwy, to blok zostaje wykonany ponownie.
do while
działa bardzo podobnie do zwykłej pętliwhile
jedyna różnica polega na tym, że w pętlido while
blok kodu zostaje wykonany przed sprawdzeniem warunku, czy jego kod zostanie zawsze wykonany przynajmniej raz.
Zadanie 2
Napisz program, który pobiera liczby tak długo, jak długo są one dodatnie, oraz wyznacza ich sumę. Gdy użytkownik wpisze liczę ujemną lub zero program wypisuje sumę i kończy działanie.
Dodatkowe możliwości
W poprzednim rozdziale poznaliśmy instrukcjebreak
. Jak pewnie pamiętasz jej działanie polegało na przerywaniu wykonywania obecnego bloku kodu i przekazanie sterowania poza}
. Poznaliśmy jej działanie z instrukcjąswitch
, ale można jej też używać z pętląwhile
jej działanie wygląda w tym przypadku bardzo podobnie. Jeśli wewnątrz bloku pętliwhile
zostanie wykonana instrukcjabreak
cała pętla zostaje przerwana, a sterowanie zostaje przekazane poza blok pętli.
Być może zastanawiasz się dlaczego wstawićbreak
do bloku pętliwhile
, który po prostu przerwie działanie pętli. Spójrzmy na poniższy przykład.
1234567 | while(warunek1){instrukcje1;if(warunek2){break;};instrukcje2;}; |
---|---|
Stosując instrukcjębreak
widać, że możemy przerwać pętlę w dwóch miejscach, po sprawdzeniuwarunek1
lub po sprawdzeniuwarunek2
, daje nam to większe możliwości.
Kolejną instrukcją umożliwiającą nam większe sterowanie pętlą jestcontinue
. Jeśli podczas wykonywania bloku pętli zostaje napotkana ta instrukcja, wykonywanie bloku zostaje przerwane, jednak wykonywanie programu nie wychodzi poza pętlę, lecz przechodzi po ponownego sprawdzenia warunku i dalszego wykonywania pętli.
1234567 | while(warunek1){instrukcje1;if(warunek2){continue;};instrukcje2;}; |
---|---|
Prześledźmy działanie powyższego przykładu. Na początek zostaje sprawdzonywarunek1
jeśli jest on poprawny zostaną wykonaneinstrukcje1
, a następnie sprawdzonywarunek2
. Jeśli jest on prawdziwy zostaje wykona instrukcjacontinue
, która przenosi sterowanie na ponowne sprawdzeniewarunek1
. W przypadku gdywarunek2
był nieprawdziwy zostaną wykonaneinstrukcje2
a następnie ponowne sprawdzeniewarunek1
.
Jak widać użycie instrukcjibreak
icontinue
daje większe możliwości w sterowaniu działania pętli. Warto jednak wiedzieć, że w większości przypadków, można uniknąć używania tych instrukcji. Używanie ich w miejscach gdzie można tego nie robić spowoduje wyłączne pogorszenie czytelności naszego kodu.
Zadanie 3
W tym zadaniu jest dostępny kod programu, który wypisuje liczby podzielne przez 5 pomiędzy 0 a 100 z pominięciem tych podzielnych przez 3. Celem zadania jest takie przerobienie programu, aby ten nie używał instrukcjicontinue
.
Operator%
oznacza resztę z dzielenia.