KWALIFIKACJA INF3 - CZERWIEC 2023 (test 2)

PYTANIE NR 4.
Wskaż kod równoważny do przedstawionego kodu zapisanego językiem PHP.
Ilustracja przedstawia fragmenty kodu napisanego w języku PHP, które są częścią pytania egzaminacyjnego dotyczącego
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Równoważny kod w PHP to taki, który dla tych samych danych wejściowych daje ten sam rezultat i wywołuje te same skutki uboczne (np. zmiany zmiennych, wypisanie tekstu). Spośród podanych wariantów tylko "Kod 2" zachowuje identyczną semantykę przedstawionego fragmentu, pozostałe zmieniają działanie w istotnym szczególe.

Pełne wyjaśnienie:

W zadaniach typu "Wskaż kod równoważny" kluczowe jest rozróżnienie między podobieństwem zapisu a równoważnością semantyczną. Dwa fragmenty PHP są równoważne wtedy, gdy dla tych samych danych wejściowych:

  • zwracają/wypisują ten sam wynik,
  • powodują te same skutki uboczne (np. przypisania do zmiennych, inkrementacje, modyfikacje tablic, rzucanie wyjątków),
  • wykonują się w tej samej logice (np. identycznie obsługują przypadki brzegowe, typy i wartości puste).

Odpowiedź "Kod 2" jest wskazana jako poprawna, ponieważ jest to jedyny wariant, który zachowuje działanie przedstawionego kodu w sensie wyniku i efektów ubocznych. W praktyce przy takich porównaniach należy sprawdzić m.in.:

  • priorytety operatorów i nawiasowanie (częsta przyczyna niepozornej zmiany logiki),
  • typy danych i sposób porównywania (różnice między porównaniem luźnym i ścisłym mogą zmienić wynik),
  • kolejność ewaluacji wyrażeń oraz to, czy dana konstrukcja wykonuje się zawsze czy warunkowo,
  • wartości zwracane (np. czy kod zwraca wartość, czy tylko coś wypisuje).

Dlaczego pozostałe propozycje bywają błędne w tego typu zadaniach? Zwykle któryś wariant:

  • zmienia warunek (np. przez inną kolejność lub inny operator),
  • zmienia moment modyfikacji zmiennej (np. pre/post-inkrementacja),
  • upraszcza kod kosztem innego zachowania w przypadkach brzegowych,
  • zastępuje konstrukcję inną, która wygląda podobnie, ale ma inny efekt (np. inny zwracany typ lub inne zachowanie dla wartości pustych).

Wskazówka egzaminacyjna: jeśli masz wątpliwość, wykonaj w myślach trace działania programu krok po kroku dla 2–3 zestawów danych (w tym przypadków brzegowych). To szybciej wykrywa "ukryte" różnice niż ocenianie po samym wyglądzie kodu.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Równoważny kod w PHP daje ten sam efekt działania: dla tych samych danych wejściowych zwraca/wypisuje ten sam wynik i powoduje te same skutki uboczne (np. takie same przypisania do zmiennych). Sama podobna składnia nie wystarcza.
Najpewniejsza metoda to krótki trace: prześledź wykonanie krok po kroku dla kilku danych (także brzegowych). Sprawdź warunki, kolejność działań, priorytety operatorów oraz to, czy kod coś zwraca, czy tylko wykonuje operacje na zmiennych.
PHP ma ustaloną kolejność wiązania operatorów. Bez nawiasów wyrażenie może być grupowane inaczej, niż "podpowiada intuicja", co zmienia wartość obliczeń lub warunek w instrukcji. Dlatego w porównywaniu kodów zawsze analizuj nawiasy i priorytety.
Skutki uboczne to zmiany stanu programu, np. modyfikacja zmiennej, dopisanie elementu do tablicy, zapis do pliku lub wypisanie tekstu. Dwa kody mogą zwrócić to samo, ale różnić się skutkami ubocznymi—wtedy nie są równoważne.
Porównanie luźne == może rzutować typy (np. łańcuch na liczbę), a ścisłe === wymaga zgodności typu i wartości. W zadaniach o równoważności zmiana operatora porównania często całkowicie zmienia wynik dla wartości brzegowych.
Tak, ale tylko jeśli oba wykonują identyczną liczbę iteracji, w tej samej kolejności i z tymi samymi operacjami na danych. Zmiana pętli (np. for na while) bywa bezpieczna, ale łatwo popełnić błąd w warunku zakończenia lub aktualizacji licznika.
Nie jest równoważna, gdy zmienia się logika (np. przez inne nawiasowanie), gdy pojawia się inna kolejność ewaluacji lub gdy warunek zawiera operacje modyfikujące zmienne (np. inkrementacje). Nawet drobna zmiana może dać inny wynik dla części danych.
Wskazówką są konstrukcje uznane za przestarzałe lub zachowania, które zmieniały się między wersjami (np. niektóre funkcje, ostrzeżenia, typowanie). Jeśli nie podano wersji, analizuj semantykę ostrożnie i opieraj się na typowych zasadach języka.
To tzw. podobieństwo powierzchowne: kod "wygląda tak samo", ale inny operator, inne miejsce inkrementacji lub inny typ porównania zmienia działanie. Na egzaminie liczy się efekt wykonania, a nie estetyka czy podobne słowa kluczowe.
Zawsze sprawdzaj: nawiasy, priorytety operatorów, == vs ===, pre/post-inkrementację, wartości zwracane i skutki uboczne. Jeśli masz czas, wykonaj szybki trace na 2–3 przykładach danych, w tym na wartościach pustych.
info

Około 32% zdających odpowiada poprawnie na to pytanie. bardzo trudne

Eksperci podkreślają: "Równoważny kod w PHP to taki, który dla tych samych danych wejściowych daje ten sam rezultat i wywołuje te same skutki uboczne (np. zmiany zmiennych, wypisanie tekstu)."

Źródła:

  • PHP Manual: Operators - https://www.php.net/manual/en/language.operators.php (dostęp: 2026-02-28)
  • PHP Manual: Control Structures - https://www.php.net/manual/en/language.control-structures.php (dostęp: 2026-02-28)
  • PHP Manual: Type Juggling - https://www.php.net/manual/en/language.types.type-juggling.php (dostęp: 2026-02-28)

Materiały:

  • Dokumentacja PHP: rozdziały o operatorach i typach
  • Materiały o refaktoryzacji i zasadach clean code dla PHP
  • Ćwiczenia z analizą fragmentów kodu (trace) krok po kroku

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego