Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki JavaScript

var x = 5; var y = 3; if (x = y) document.getElementById("demo").innerHTML = 'zmienne są równe'; else document.getElementById("demo").innerHTML =...

var x = 5;
var y = 3;
if (x = y)  document.getElementById("demo").innerHTML = 'zmienne są równe';
else        document.getElementById("demo").innerHTML = 'zmienne się różnią';
W ramce przedstawiono kod JavaScript z błędem logicznym. Program powinien wypisywać informację, czy liczby są sobie równe czy nie, lecz nie wykonuje tego. Wskaż odpowiedź, która dotyczy błędu.
A. W klauzuli if występuje przypisanie zamiast porównania.
Dobrze. x = y przypisuje wartość, a porównanie wymaga === albo ==.
B. Nieprawidłowo zadeklarowano zmienne.
Źle. Deklaracje var x = 5; i var y = 3; są poprawne.
C. Instrukcje wewnątrz sekcji if oraz else powinny być zamienione miejscami.
Źle. Warunek jest zawsze prawdziwy, więc zamiana gałęzi niczego nie naprawi.
D. Przed klauzulą else nie powinno być średnika.
Źle. Średnik kończy instrukcję gałęzi if bez klamer i jest tu dozwolony.

Pytanie z egzaminu CKE, styczeń 2017 (arkusz E.14-X-17.01).

Warunek if (x = y) zawiera pojedynczy znak równości, czyli przypisanie. Zamiast porównać liczby, program wpisuje do x wartość 3, a wynik przypisania, liczba 3, jest traktowany jako prawda. Dlatego zawsze wykona się gałąź „zmienne są równe”, niezależnie od wartości zmiennych. Do zapamiętania: = przypisuje, == porównuje z konwersją typów, a === porównuje wartość i typ. Poprawny warunek to if (x === y). Taki błąd jest logiczny, a nie składniowy, więc przeglądarka go nie zgłosi; wykryje go dopiero test albo narzędzie typu ESLint z regułą zakazującą przypisań w warunkach. Ten sam błąd zdarza się w PHP, C++ i Javie.
Wybór innej odpowiedzi zwykle oznacza szukanie błędu tam, gdzie kod jest poprawny. Deklaracje var x = 5; i var y = 3; są prawidłowe; dziś częściej pisze się let lub const, ale var działa. Średnik przed else w tym kodzie kończy instrukcję w gałęzi if i jest dozwolony, bo gałąź nie ma nawiasów klamrowych; kłopot sprawiłby dopiero średnik tuż po if (...). Zamiana treści gałęzi też nic nie da: warunek zawsze jest prawdziwy, więc program po zamianie zawsze pisałby, że zmienne się różnią. Źródłem błędu jest pojedynczy znak = w warunku, który przypisuje zamiast porównywać. Dobrą praktyką jest też otaczanie treści gałęzi nawiasami klamrowymi, nawet przy jednej instrukcji - kod staje się czytelniejszy i trudniej o pomyłkę przy jego rozbudowie. W PHP i C++ pojedynczy znak równości w warunku działa identycznie i daje ten sam błąd.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.