Który zapis w języku JavaScript daje jednakowy rezultat do przedstawionego kodu?
|
A. x = 0; x++; x = x + 9;
B. x = 10; x = 0;
C. x = 0; x--; x *= 9;
D. x = 10; x = x + 10;
Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).
Ten zapis daje taki sam wynik, bo w obu przypadkach końcowa wartość zmiennej x wynosi 10. W kodzie x = 0; x += 10; najpierw przypisujemy do x wartość 0, a potem operator += zwiększa aktualną wartość zmiennej o 10. Czyli x += 10 oznacza praktycznie to samo co x = x + 10. W odpowiedzi x = 0; x++; x = x + 9; najpierw x też ma wartość 0, potem x++ zwiększa ją o 1, więc x staje się równe 1, a na końcu dodajemy jeszcze 9. Wynik: 10. Moim zdaniem to dobre pytanie, bo sprawdza nie tylko pamięciowe kojarzenie operatorów, ale też umiejętność śledzenia programu linijka po linijce. W praktycznym JavaScript często używa się takich skróconych operatorów jak +=, -=, *= czy ++, na przykład przy licznikach kliknięć, sumowaniu wartości w koszyku albo zwiększaniu indeksu w pętli. Warto jednak pamiętać o dobrej praktyce: lepiej deklarować zmienne przez let lub const, np. let x = 0;, bo samo x = 0 może w niektórych trybach utworzyć zmienną globalną, a to potem robi bałagan w większym projekcie.
Kod z pytania kończy działanie z wartością x równą 10, więc każdy równoważny zapis musi prowadzić dokładnie do takiego samego stanu zmiennej po wykonaniu wszystkich instrukcji. Najważniejsze jest tu spokojne prześledzenie wartości po każdej linijce, a nie tylko patrzenie, czy gdzieś występuje liczba 10. To częsty błąd w JavaScript: ktoś widzi przypisanie x = 10 i od razu zakłada, że wynik będzie 10, ale następna instrukcja może tę wartość nadpisać albo zmienić. Gdy po przypisaniu x = 10 pojawia się x = 0, końcowy rezultat to 0, bo ostatnie przypisanie wygrywa. Podobnie zapis x = 10; x = x + 10; nie jest równoważny, bo najpierw ustawiamy 10, a potem dodajemy kolejne 10, więc otrzymujemy 20. To już inna operacja niż start od zera i dodanie dziesięciu. Trzeba też uważać na operator -- oraz *=. Jeśli x wynosi 0, to x-- zmniejsza je do -1, a następnie x *= 9 mnoży bieżącą wartość przez 9, co daje -9. Moim zdaniem najprostsza metoda przy takich zadaniach to zrobić sobie małą tabelkę w głowie: wartość początkowa, zmiana po instrukcji, wartość końcowa. W prawdziwym kodzie webowym takie pomyłki potrafią zepsuć licznik, cenę produktu albo indeks tablicy, więc ta niby drobna składnia ma dość praktyczne znaczenie.