W języku JavaScript należy zapisać warunek, który będzie spełniony, gdy zmienna a będzie dowolną liczbą ujemną lub gdy zmienna b będzie dowolną liczbą spoza przedziału domkniętego od 10 do 100. Użyte w tym warunku wyrażenie logiczne będzie miało postać
A. (a < 0) || ((b < 10) && (b > 100))
B. (a < 0) || ((b < 10) || (b > 100))
C. (a < 0) && ((b < 10) && (b > 100))
D. (a < 0) && ((b < 10) || (b > 100))
Warunek jest poprawny, bo dokładnie oddaje treść zadania: wystarczy, że spełniony będzie jeden z dwóch przypadków. Zmienna a ma być dowolną liczbą ujemną, więc zapisujemy to jako a < 0. Druga część mówi, że zmienna b ma być spoza przedziału domkniętego od 10 do 100. Przedział domknięty oznacza, że wartości 10 i 100 należą do środka zakresu, więc poza nim są tylko wartości b < 10 albo b > 100. Dlatego całość trzeba połączyć operatorem logicznym ||, czyli alternatywą: (a < 0) || ((b < 10) || (b > 100)). W JavaScript operator || oznacza logiczne LUB, a && oznacza logiczne I. Moim zdaniem warto tu zostawić nawiasy, nawet jeśli część z nich nie zawsze jest wymagana przez priorytety operatorów, bo kod jest czytelniejszy i mniej podatny na głupie pomyłki. W praktyce taki warunek można wykorzystać np. przy walidacji formularza: jeśli a jest ujemne albo b wychodzi poza dozwolony zakres, program może pokazać komunikat, zablokować zapis danych albo wykonać inną akcję. Dobra praktyka w JavaScript to pisać warunki tak, żeby osoba czytająca kod od razu widziała intencję, a tutaj nawiasy bardzo w tym pomagają.
W tym zadaniu najłatwiej pomylić dwa różne znaczenia operatorów logicznych. Operator && w JavaScript oznacza, że oba warunki muszą być spełnione jednocześnie, natomiast || oznacza, że wystarczy spełnienie jednego z nich. Treść mówi: a jest ujemne lub b jest poza zakresem od 10 do 100. To lub jest tutaj kluczowe, bo nie wymagamy naraz ujemnego a i niepoprawnego b. Jeśli ktoś użyje && pomiędzy warunkiem a < 0 oraz sprawdzaniem b, to program zaakceptuje tylko sytuacje, gdzie oba problemy występują razem. Przykładowo dla a = -5 i b = 50 warunek z && byłby fałszywy, mimo że a faktycznie jest liczbą ujemną i całość według treści powinna być spełniona. Drugi typowy błąd to zapisanie, że b < 10 && b > 100. Taki warunek jest logicznie niemożliwy dla zwykłej liczby, bo jedna wartość nie może być jednocześnie mniejsza od 10 i większa od 100. To dość częsta pomyłka przy opisie wartości spoza przedziału. Poprawne myślenie jest takie: b leży poza przedziałem domkniętym [10, 100], gdy znajduje się po lewej stronie, czyli b < 10, albo po prawej stronie, czyli b > 100. Można też spojrzeć na to przez zaprzeczenie: b nie jest w środku zakresu, czyli nie zachodzi b >= 10 && b <= 100. Po przekształceniu zgodnie z prawami de Morgana dostajemy właśnie b < 10 || b > 100. Warto też pamiętać o granicach: ponieważ przedział jest domknięty, wartości 10 i 100 nie są poza przedziałem. Z mojego doświadczenia takie zadania najlepiej rozwiązywać na kilku testowych liczbach, np. a = 1, b = 5 albo a = -2, b = 50, bo wtedy szybko widać, czy operator logiczny naprawdę pasuje do opisu słownego.