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 PHP

Słowa kluczowe: Deklaracja funkcji w PHP Operatory arytmetyczne w PHP

Która z wymienionych funkcji zapisanych językiem PHP zwraca połowę sumy a i b?

A.
function licz($a, $b) { return ($a + $b)/2; }
B.
function licz($a, $b) { return 2/($a + $b); }
C.
function licz($a, $b) { return $a/2 + $b; }
D.
function licz($a, $b) { return $a + $b/2; }
Wybrana funkcja jest poprawna, bo najpierw oblicza sumę argumentów $a i $b, a dopiero potem dzieli wynik przez 2. Kluczowe są tutaj nawiasy w wyrażeniu ($a + $b) / 2. W PHP, tak samo jak w matematyce, nawiasy mają najwyższy priorytet, więc interpreter najpierw wykona dodawanie, a potem operator dzielenia. Czyli dla $a = 10 i $b = 6 funkcja zwróci 8, bo 10 + 6 = 16, a 16 / 2 = 8. To jest dokładnie średnia arytmetyczna dwóch liczb. Z praktycznego punktu widzenia taka funkcja może się przydać np. przy liczeniu średniej ocen, średniej ceny, punktu środkowego między dwiema wartościami albo prostych statystyk w aplikacji webowej. W PHP warto też pamiętać, że operator / zwykle zwraca wynik typu float, nawet jeśli liczby wejściowe są całkowite. W dobrym kodzie produkcyjnym dobrze byłoby dopisać typy, np. function licz(float $a, float $b): float, bo wtedy funkcja jest czytelniejsza i trudniej przypadkiem przekazać do niej tekst zamiast liczby. Moim zdaniem nawiasy w takich wzorach warto pisać nawet wtedy, gdy wydają się oczywiste, bo kod czyta potem człowiek, nie tylko interpreter.
W niepoprawnych wariantach problem wynika głównie z niezrozumienia kolejności wykonywania operatorów albo z pomylenia pojęcia połowy sumy z sumą połówek tylko jednego składnika. W PHP operator dzielenia ma wyższy priorytet niż dodawanie, więc zapis $a + $b / 2 nie oznacza tego samego co ($a + $b) / 2. Interpreter najpierw podzieli $b przez 2, a dopiero potem doda $a. Dla wartości 10 i 6 da to 13, a nie 8. Podobny błąd jest w wyrażeniu $a / 2 + $b, tylko tam dzielona jest przez 2 zmienna $a, a nie cała suma. To częsta pułapka, bo na oko zapis wygląda prawie jak wzór na średnią, ale matematycznie robi coś innego. Jeszcze inną koncepcją jest 2 / ($a + $b). Taki zapis oblicza iloraz liczby 2 przez sumę argumentów, czyli coś odwrotnego do oczekiwanego działania. Przy $a + $b równym 0 może nawet pojawić się problem dzielenia przez zero, więc w realnym kodzie byłoby to dodatkowo ryzykowne. Dobra praktyka jest prosta: jeśli chcesz wykonać działanie na całej sumie, obejmij sumę nawiasami. W testach jednostkowych od razu wyszłoby, że tylko zapis ($a + $b) / 2 zwraca poprawną średnią dla różnych danych wejściowych. Z mojego doświadczenia takie drobne nawiasy bardzo często decydują, czy funkcja liczy poprawnie, czy tylko wygląda poprawnie.

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.