$liczba = 10; while ($liczba < 50) { echo "$liczba "; $liczba = $liczba + 5; } W wyniku działania pętli zapisanej w języku PHP zostanie wypisany ciąg...
$liczba = 10; while ($liczba < 50) { echo "$liczba "; $liczba = $liczba + 5; }W wyniku działania pętli zapisanej w języku PHP zostanie wypisany ciąg liczb:
A. 0 5 10 15 20 25 30 35 40 45
B. 0 5 10 15 20 25 30 35 40 45 50
C. 10 15 20 25 30 35 40 45 50
D. 10 15 20 25 30 35 40 45
Pytanie z egzaminu CKE, styczeń 2017 (arkusz E.14-X-17.01).
Ta odpowiedź jest poprawna, ponieważ pętla while w PHP najpierw sprawdza warunek, a dopiero potem wykonuje instrukcje znajdujące się w jej bloku. Na początku zmienna liczba ma wartość 10. Warunek liczba < 50 jest spełniony, więc PHP wypisuje 10, a następnie zwiększa wartość zmiennej o 5. Potem sytuacja się powtarza: 15, 20, 25, 30, 35, 40 i 45. Gdy po wypisaniu 45 zmienna zostanie zwiększona do 50, warunek 50 < 50 jest fałszywy, więc liczba 50 nie zostanie już wypisana. To jest typowy przykład pętli z kontrolą warunku na początku, czyli tzw. pre-test loop. Moim zdaniem warto tu zawsze robić krótką tabelkę śledzenia wartości zmiennej, bo przy granicach typu < oraz <= bardzo łatwo się pomylić. W praktyce takie pętle stosuje się np. do generowania kolejnych elementów listy, paginacji, liczników, przedziałów cenowych albo prostych raportów. Dobra praktyka branżowa to pilnowanie, żeby zmienna sterująca pętlą była zmieniana w środku bloku, bo inaczej można przypadkiem zrobić pętlę nieskończoną, co w aplikacji webowej potrafi mocno obciążyć serwer.
W tym zadaniu najłatwiej pomylić się na dwóch rzeczach: wartości początkowej zmiennej oraz warunku zakończenia pętli. Kod nie zaczyna liczenia od zera, tylko od wartości przypisanej przed pętlą, czyli od 10. Jeżeli w wyniku pojawia się 0 albo 5, to znaczy, że zostało zignorowane przypisanie początkowe. W PHP zmienna nie przyjmuje automatycznie zera tylko dlatego, że później jest zwiększana o 5. Najpierw liczy się konkretna instrukcja przypisania, a tutaj ustawiono start na 10. Drugi częsty błąd to dopisanie wartości 50 do wyniku. Warunek w pętli ma postać liczba < 50, a nie liczba <= 50. To drobna różnica w zapisie, ale w programowaniu ma bardzo duże znaczenie. Operator < oznacza ściśle mniej niż, więc 50 nie spełnia warunku. Trzeba też pamiętać, że echo wykonuje się tylko wtedy, gdy warunek został sprawdzony i jest prawdziwy. Po wypisaniu 45 zmienna zostaje zwiększona do 50, ale kolejny obieg pętli już nie nastąpi. Z mojego doświadczenia takie błędy często biorą się z liczenia w głowie bez przejścia przez kolejne iteracje. W realnym kodzie, zwłaszcza w PHP na stronach WWW, takie niedopatrzenie może skutkować np. wygenerowaniem jednego elementu za dużo, pominięciem rekordu albo błędnym zakresem danych w widoku.