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

Skrypt JavaScript obsługujący płace pracowników ma za zadanie wygenerować raport dla pracowników, którzy są zatrudnieni na umowę o pracę oraz zarabiają w przedziale obustronnie domkniętym od 4000 do 4500 zł. Wskaż warunek wygenerowania raportu.

A.
umowa == 'praca' || (pensja >= 4000 && pensja <= 4500)
B.
umowa == 'praca' && (pensja >= 4000 && pensja <= 4500)
C.
umowa == 'praca' || (pensja >= 4000 || pensja <= 4500)
D.
umowa == 'praca' && (pensja >= 4000 || pensja <= 4500)

Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).

Warunek umowa == 'praca' && (pensja >= 4000 && pensja <= 4500) dobrze opisuje wymaganie z treści zadania, bo łączy dwa niezależne kryteria operatorem logicznym &&, czyli logicznym I. Raport ma powstać tylko dla pracownika zatrudnionego na umowę o pracę oraz jednocześnie z pensją w zakresie od 4000 do 4500 zł. Przedział jest obustronnie domknięty, więc wartości graniczne też się liczą: 4000 przechodzi i 4500 też przechodzi. Dlatego użyte są operatory >= oraz <=, a nie samo > albo <. Nawiasy przy pensji poprawiają czytelność i jasno pokazują, że sprawdzamy cały zakres wynagrodzenia jako jedną część warunku. W praktycznym kodzie JavaScript taki zapis można wykorzystać np. w instrukcji if albo podczas filtrowania tablicy pracowników metodą filter(). Moim zdaniem to jest też dobra okazja, żeby pamiętać o dobrych praktykach: w realnym projekcie często lepiej byłoby użyć operatora === zamiast ==, czyli umowa === 'praca', żeby uniknąć niejawnej konwersji typów. Sama logika wyboru odpowiedzi pozostaje jednak taka: warunki muszą być połączone przez &&, bo wszystkie muszą być spełnione naraz.
W tym zadaniu najłatwiej pomylić znaczenie operatorów && i ||. Operator && oznacza, że oba warunki muszą być prawdziwe jednocześnie. Operator || oznacza, że wystarczy spełnienie jednego z warunków. A tutaj nie szukamy pracowników, którzy mają albo umowę o pracę, albo pensję z jakiegoś zakresu. Szukamy wyłącznie takich osób, które spełniają oba wymagania naraz: rodzaj umowy ma być równy 'praca' i pensja ma mieścić się między 4000 a 4500 włącznie.

Bardzo zdradliwy jest zapis pensja >= 4000 || pensja <= 4500. Na pierwszy rzut oka wygląda jak sprawdzanie zakresu, ale w rzeczywistości taki warunek dla zwykłych wartości liczbowych będzie prawdziwy prawie zawsze. Pensja 3000 spełnia pensja <= 4500, pensja 5000 spełnia pensja >= 4000, a pensja 4200 spełnia oba. Czyli nie filtruje zakresu, tylko przepuszcza praktycznie wszystkie pensje. Do przedziału domkniętego potrzebne jest pensja >= 4000 && pensja <= 4500.

Równie problematyczne jest użycie || między sprawdzeniem umowy a sprawdzeniem wynagrodzenia. Wtedy do raportu mógłby trafić pracownik z właściwą pensją, ale bez umowy o pracę, albo pracownik z umową o pracę, ale z pensją spoza zakresu. To nie zgadza się z wymaganiem biznesowym. W systemach kadrowo-płacowych takie drobne pomyłki logiczne potrafią dać błędny raport, a potem ktoś musi ręcznie wyjaśniać rozbieżności. Z mojego doświadczenia warto czytać warunek jak zdanie po polsku: umowa jest pracą i pensja jest co najmniej 4000 i pensja jest najwyżej 4500. Jeśli w zdaniu pojawia się oraz, w kodzie prawie zawsze będzie to &&.

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.