Instrukcją równoważną funkcjonalnie do przedstawionej instrukcji JavaScript jest
|
|
|
|
|
A. Kod 1.
B. Kod 2.
C. Kod 4.
D. Kod 3.
Pytanie z egzaminu CKE, styczeń 2024 (arkusz EE.09-SG-24.01).
Instrukcja równoważna to Kod 3, bo zachowuje wszystkie trzy kluczowe elementy pętli for: inicjalizację zmiennej, warunek kontynuacji oraz zmianę licznika po wykonaniu ciała pętli. Oryginalny zapis for (i = 0; i < 100; i += 10) najpierw ustawia i na 0, potem sprawdza, czy i jest mniejsze od 100, wypisuje wartość i dopiero na końcu zwiększa i o 10. Kod 3 robi dokładnie to samo: i = 0; następnie while (i < 100), wypisanie wartości i oraz i += 10 wewnątrz bloku. Wynik działania będzie taki sam: 0 10 20 30 40 50 60 70 80 90. W praktyce taka zamiana jest często spotykana, gdy chcemy lepiej kontrolować moment zmiany licznika albo gdy warunek pętli zależy od bardziej rozbudowanej logiki. Moim zdaniem warto zapamiętać, że pętla for jest po prostu bardziej zwartym zapisem typowego schematu: ustaw licznik, sprawdź warunek, wykonaj instrukcje, zmień licznik. Dobra praktyka w JavaScript to też deklarowanie zmiennej, np. let i = 0, żeby nie tworzyć przypadkiem zmiennej globalnej. W starszych przykładach edukacyjnych często się to pomija, ale w normalnym projekcie lepiej tego pilnować.
W tym pytaniu najważniejsze jest nie samo podobieństwo składni, tylko pełna zgodność działania programu. Pętla for z treści zadania zaczyna od ustawienia i na 0, działa dopóki i < 100, po każdym wypisaniu zwiększa licznik o 10 i kończy się, gdy i osiągnie 100. To oznacza, że wypisuje wartości od 0 do 90 co 10. Jeśli w pętli while zabraknie inicjalizacji i = 0, program może zależeć od wcześniejszej wartości zmiennej i, a to jest bardzo niebezpieczne i nieprzewidywalne. Z mojego doświadczenia to częsty błąd: ktoś widzi sam warunek while i zapomina, że for zawiera jeszcze ustawienie wartości początkowej. Równie istotny jest przyrost licznika. Gdy w pętli while nie ma instrukcji i += 10, zmienna i się nie zmienia, więc dla wartości początkowej mniejszej od 100 pętla może stać się nieskończona i stale wypisywać tę samą liczbę. To typowa pułapka przy przepisywaniu for na while. Warunek i < 10 również zmienia sens programu: wtedy pętla nie wykona dziesięciu kroków co 10 aż do 90, tylko zakończy się znacznie wcześniej albo będzie wypisywać zupełnie inny zakres. Podobnie przyrost i++ oznacza zwiększanie o 1, a nie o 10, więc wynik byłby 0 1 2 3 4 5 6 7 8 9, czyli inna sekwencja. W programowaniu webowym takie drobne różnice mają znaczenie, bo pętle często generują elementy strony, przetwarzają tablice albo budują dane do wyświetlenia. Poprawne odwzorowanie pętli wymaga przeniesienia wszystkich jej składników, a nie tylko ogólnego pomysłu, że coś ma się powtarzać.