function fun1($a, $b) { if ($a > $b) return $a; elseif ($b > $a) return $b; else return -1; } Który z komentarzy opisuje zadanie zdefiniowanej w...
function fun1($a, $b) { if ($a > $b) return $a; elseif ($b > $a) return $b; else return -1; }Który z komentarzy opisuje zadanie zdefiniowanej w języku PHP funkcji?
else i zwracane jest -1.else z wartością -1.-1, więc oba elementy tego opisu są błędne.$a > $b funkcja zwraca $a, czyli wartość większą, a nie mniejszą.Pytanie z egzaminu CKE, styczeń 2020 (arkusz EE.09-SG-20.01).
Wystarczy przejść funkcję gałąź po gałęzi. Gdy $a > $b, zwracana jest $a, czyli większa z dwóch liczb. Gdy $b > $a, zwracana jest $b, znowu większa. Gałąź else wykona się tylko wtedy, gdy żadna nie jest większa, czyli gdy są równe, i wtedy funkcja zwraca -1.
Sprawdzenie na liczbach: fun1(3, 7) daje 7, fun1(9, 2) daje 9, a fun1(5, 5) daje -1. Taką funkcję warto znać jako wzorzec: dwa porównania i osobna obsługa równości. Gdyby równość nie wymagała osobnej wartości, wystarczyłaby wbudowana funkcja max($a, $b).
Komentarz /* ... */ nad funkcją powinien mówić, co zwraca dla każdego przypadku.
Dwie błędne odpowiedzi myli kierunek porównania. Warunek $a > $b prowadzi do zwrócenia $a, więc wraca liczba większa, a nie mniejsza. Żeby funkcja zwracała niższą wartość, w gałęzi if trzeba by zwrócić $b.
Pozostałe pomyłki dotyczą przypadku równości. Kto widzi, że przy równych liczbach obojętne jest, którą zwrócić, łatwo zakłada, że funkcja zwróci $a. Kod mówi jednak co innego: przy równości oba warunki są fałszywe i wykonuje się else z return -1;. Komentarz ma opisywać to, co kod rzeczywiście robi.
Przy takich zadaniach podstaw trzy pary liczb: pierwsza większa, druga większa i obie równe. Wynik każdego przypadku od razu wskaże właściwy komentarz.
Zwróć też uwagę, że return kończy działanie funkcji. Po zwróceniu wartości w gałęzi if dalsze warunki nie są już sprawdzane.