Skrypt JavaScript obsługujący płace pracowników ma wygenerować raport dla osób zatrudnionych na umowę zlecenie, które zarabiają w przedziale obustronnie domkniętym od 3000 do 3500 zł. Który warunek należy zastosować?
A.
umowa == 'zlecenie' || (pensja >= 3000 && pensja <= 3500)
B.
umowa == 'zlecenie' || (pensja >= 3000 || pensja <= 3500)
C.
umowa == 'zlecenie' && (pensja >= 3000 || pensja <= 3500)
D.
umowa == 'zlecenie' && (pensja >= 3000 && pensja <= 3500)
Poprawny warunek to umowa == 'zlecenie' && (pensja >= 3000 && pensja <= 3500). Operator && oznacza logiczne „i”, więc wszystkie połączone nim warunki muszą być prawdziwe jednocześnie. Najpierw sprawdzany jest rodzaj umowy, a następnie zakres pensji. Zapis pensja >= 3000 && pensja <= 3500 odpowiada przedziałowi obustronnie domkniętemu od 3000 do 3500 zł, czyli uwzględnia również wartości graniczne 3000 i 3500. Do zapamiętania: przedział zamknięty zapisuje się jako dolna_granica <= wartość && wartość <= górna_granica, w JavaScript zwykle w formie wartość >= dolna_granica && wartość <= górna_granica. Taki warunek stosuje się przy filtrowaniu danych, np. podczas generowania raportów kadrowych lub zestawień płacowych.
W tym zadaniu trzeba jednocześnie ograniczyć typ umowy i zakres wynagrodzenia. Warunek umowa == 'zlecenie' || (pensja >= 3000 || pensja <= 3500) jest zbyt szeroki: operator || oznacza „lub”, więc wystarczy spełnienie jednego fragmentu. Dodatkowo pensja >= 3000 || pensja <= 3500 dla wartości liczbowych praktycznie nie ogranicza pensji do podanego przedziału. Warunek umowa == 'zlecenie' && (pensja >= 3000 || pensja <= 3500) poprawnie wymaga umowy zlecenia, ale błędnie opisuje zakres pensji, ponieważ używa || zamiast && między granicami. Warunek umowa == 'zlecenie' || (pensja >= 3000 && pensja <= 3500) wybierze wszystkie osoby na umowie zlecenie niezależnie od pensji oraz osoby z innych umów, jeśli mieszczą się w przedziale. Poprawny zapis to umowa == 'zlecenie' && (pensja >= 3000 && pensja <= 3500). Typowy błąd polega na traktowaniu operatora || jak zawężenia, choć w filtrach zwykle rozszerza on zbiór wyników.