Program zapisany w języku JavaScript oblicza rabat na buty w rozmiarze 42 lub 43 (zmienna rozmiar) przy zakupach powyżej 300 zł (zmienna zakupy). Warunek do obliczeń powinien być zapisany przy pomocy wyrażenia logicznego
A. zakupy > 300 || rozmiar == 42 || rozmiar == 43
B. zakupy > 300 && (rozmiar == 42 || rozmiar == 43)
C. zakupy > 300 && rozmiar == 42 && rozmiar == 43
D. zakupy > 300 || (rozmiar == 42 && rozmiar == 43)
Warunek zakupy > 300 && (rozmiar == 42 || rozmiar == 43) dobrze opisuje wymaganie biznesowe: rabat ma być naliczony tylko wtedy, gdy jednocześnie spełnione są dwa warunki. Klient musi zrobić zakupy powyżej 300 zł oraz kupować buty w rozmiarze 42 albo 43. Operator && oznacza logiczne I, czyli oba główne warunki muszą być prawdziwe. Operator || oznacza logiczne LUB, więc wystarczy jeden z dwóch rozmiarów: 42 lub 43. Nawias jest tu bardzo ważny, bo grupuje sprawdzenie rozmiaru i pokazuje, że warianty 42 oraz 43 są traktowane jako jedna część warunku. Praktycznie można to czytać tak: jeśli zakupy są większe niż 300 i rozmiar jest jednym z dozwolonych, nalicz rabat. Dla przykładu: zakupy = 350 i rozmiar = 42 daje true, zakupy = 280 i rozmiar = 42 daje false, a zakupy = 500 i rozmiar = 41 też daje false. Moim zdaniem to bardzo typowy warunek z formularzy sklepowych, promocji i walidacji koszyka. W realnym JavaScript często stosuje się też === zamiast ==, jeśli mamy pewność co do typu danych, bo to dobra praktyka branżowa i zmniejsza ryzyko dziwnych konwersji typów.
W tym zadaniu łatwo pomylić znaczenie słów oraz działanie operatorów logicznych. Sama informacja o zakupach powyżej 300 zł nie wystarcza, bo promocja jest jeszcze ograniczona do konkretnych rozmiarów butów. Jeżeli użyje się operatora || między kwotą zakupów a rozmiarami, program przyzna rabat zbyt szeroko: wystarczy wtedy, że klient wyda ponad 300 zł, nawet gdy wybierze rozmiar 40, albo wybierze rozmiar 42, nawet przy zakupach za 100 zł. To już nie jest ten sam warunek biznesowy, tylko dużo luźniejsza promocja. Z kolei zapis wymagający jednocześnie rozmiaru 42 i 43 jest logicznie niemożliwy dla jednej zmiennej rozmiar. Jedna wartość liczbowa nie może w tym samym momencie być równa 42 i 43, więc taki fragment zawsze zwróci false. To jest częsty błąd: ktoś widzi w treści zadania dwa wymagane rozmiary i mechanicznie łączy je przez &&, zamiast potraktować je jako alternatywę. Podobny problem pojawia się przy warunku, w którym zakupy > 300 połączono przez || z niemożliwym sprawdzeniem rozmiarów. Ponieważ część rozmiar == 42 && rozmiar == 43 nigdy nie będzie prawdziwa, cały warunek sprowadza się praktycznie do samego zakupy > 300. Wtedy rozmiar przestaje mieć znaczenie, a to łamie założenie zadania. Z mojego doświadczenia najlepiej najpierw przepisać warunek zwykłym zdaniem: kwota musi być większa niż 300 oraz rozmiar musi należeć do zestawu 42 lub 43. Dopiero potem zamieniać to na składnię JavaScript. Nawiasy są tu dobrą praktyką, bo poprawiają czytelność i ograniczają ryzyko pomyłki przy priorytecie operatorów.