W języku JavaScript stworzono funkcję o nazwie licz_pitagoras, która oblicza długość przeciwprostokątnej trójkąta prostokątnego, zgodnie z twierdzeniem Pitagorasa. Funkcja pobiera dwa parametry wejściowe i zwraca wartość. Prawidłowe wywołanie takiej funkcji, wraz z pobraniem zwróconego wyniku, będzie miało postać
A.
licz_pitagoras(a, b) = c;
B.
licz_pitagoras(a, b, c);
C.
c = licz_pitagoras(a, b);
D.
licz_pitagoras(a, b);
Pytanie z egzaminu CKE, czerwiec 2022 (arkusz E.14-SG-22.06).
Wywołanie c = licz_pitagoras(a, b); jest właściwe, bo funkcja przyjmuje dwa argumenty wejściowe, czyli wartości a i b, a wynik zwracany przez return zostaje przypisany do zmiennej c. W JavaScript funkcja nie „wpisuje” sama wyniku do zmiennej po stronie wywołania, tylko zwraca wartość w miejscu, gdzie została użyta. Czyli jeśli funkcja oblicza przeciwprostokątną ze wzoru $c=\sqrt{a^2+b^2}$, to wynik trzeba przechwycić, np. tak: let c = licz_pitagoras(a, b); albo const c = licz_pitagoras(a, b);. Sama postać z pytania jest poprawna, zakładając że zmienna c została już wcześniej zadeklarowana. Z mojego doświadczenia to bardzo ważny nawyk: funkcja powinna robić jedną konkretną rzecz i zwracać wynik, a kod wywołujący decyduje, co z tym wynikiem zrobić. Można go przypisać do zmiennej, wypisać w konsoli, wstawić do elementu strony albo wykorzystać w dalszych obliczeniach. W praktyce branżowej lepiej unikać zmiennych globalnych i pisać np. const c = licz_pitagoras(a, b);, bo taki kod jest czytelniejszy, bezpieczniejszy i łatwiej go później testować.
W tym zadaniu kluczowe jest rozróżnienie między samym uruchomieniem funkcji a pobraniem wartości, którą funkcja zwraca. W JavaScript zapis licz_pitagoras(a, b); faktycznie wywołuje funkcję z dwoma argumentami, ale jeśli funkcja zwraca wynik przez return, to ten wynik nie zostaje nigdzie zapisany. Można powiedzieć, że zostaje obliczony i od razu „zgubiony”, chyba że funkcja ma jakieś skutki uboczne, na przykład wypisuje coś na stronie. Przy obliczaniu przeciwprostokątnej zwykle chcemy jednak dostać konkretną liczbę do dalszego użycia, więc potrzebne jest przypisanie wyniku do zmiennej. Zapis licz_pitagoras(a, b) = c; odwraca kierunek przypisania i jest niezgodny z zasadami języka. Po lewej stronie operatora = musi znajdować się coś, do czego da się przypisać wartość, najczęściej zmienna albo właściwość obiektu. Wynik wywołania funkcji nie jest takim miejscem w pamięci. To częsty błąd myślowy, bo w matematyce znak równości bywa traktowany symetrycznie, a w programowaniu operator przypisania działa kierunkowo: prawa strona jest obliczana, potem trafia do lewej strony. Z kolei przekazanie c jako trzeciego argumentu sugeruje, jakby funkcja miała oddać wynik przez dodatkowy parametr. W JavaScript przy prostych typach, takich jak liczby, tak się tego normalnie nie robi. Skoro funkcja została opisana jako przyjmująca dwa parametry i zwracająca wartość, to należy przekazać tylko a i b, a zwrócony rezultat odebrać przez przypisanie. Moim zdaniem to jedna z podstawowych rzeczy, które warto dobrze przećwiczyć, bo ten sam schemat pojawia się potem przy obliczeniach, walidacji formularzy, pracy z tablicami i obsłudze danych z API.