Które wyrażenie logiczne należy zastosować w języku JavaScript, aby wykonać operacje tylko dla dowolnych liczb ujemnych z przedziału jednostronnie domkniętego <-200, -100)?
A. (liczba <= -200) && (liczba < -100)
B. (liczba >= -200) || (liczba > -100)
C. (liczba >= -200) && (liczba < -100)
D. (liczba <= -200) || (liczba > -100)
Pytanie z egzaminu CKE, styczeń 2020 (arkusz E.14-SG-20.01).
Wyrażenie (liczba >= -200) && (liczba < -100) dokładnie opisuje przedział <-200, -100), czyli taki, w którym lewa granica jest domknięta, a prawa otwarta. W praktyce oznacza to, że wartość -200 ma zostać zaakceptowana, ale -100 już nie. Operator >= sprawdza więc warunek dolnej granicy: liczba musi być większa lub równa -200. Operator < pilnuje górnej granicy: liczba musi być mniejsza od -100. Bardzo ważne jest użycie operatora logicznego &&, bo oba warunki muszą być spełnione jednocześnie. Dla liczby -150 wynik będzie true, dla -200 też true, ale dla -100 false, a dla -250 również false. Z mojego doświadczenia to jest jeden z tych przypadków, gdzie najlepiej narysować sobie oś liczbową, bo przy liczbach ujemnych łatwo się pomylić. W JavaScript taki warunek można użyć np. w instrukcji if, przy filtrowaniu danych z formularza albo podczas walidacji zakresu: if (liczba >= -200 && liczba < -100). Dobrą praktyką jest też upewnić się, że zmienna faktycznie jest liczbą, np. przez Number.isFinite(liczba), bo JavaScript potrafi robić konwersje typów trochę zaskakująco.
W tym zadaniu kluczowe jest poprawne odczytanie przedziału <-200, -100). Nawias ostry lub kwadratowy po lewej stronie oznacza, że wartość -200 należy do zakresu, natomiast nawias okrągły przy -100 oznacza, że -100 jest już poza zakresem. Dlatego warunek musi ograniczać liczbę z dwóch stron jednocześnie. W JavaScript robi się to operatorem &&, czyli logicznym AND. Jeśli użyje się operatora ||, czyli logicznego OR, wystarczy spełnienie tylko jednego z warunków, a to zwykle mocno rozszerza zakres. Na przykład warunek z alternatywą może przepuścić liczby większe od -100, a więc także -50, 0 czy nawet dodatnie wartości, co kompletnie nie pasuje do podanego przedziału. To typowy błąd: ktoś myśli, że skoro są dwa ograniczenia, to trzeba je po prostu połączyć, ale wybiera niewłaściwy operator logiczny. Trzeba zapamiętać, że zakres od-do prawie zawsze zapisujemy jako dwa porównania połączone przez &&. Problemem jest też odwrócenie znaku nierówności przy lewej granicy. Zapis liczba <= -200 oznacza wartości mniejsze lub równe -200, czyli np. -300, -500, a nie wartości znajdujące się między -200 a -100. Przy liczbach ujemnych to bywa zdradliwe, bo mniejsza liczba na osi jest bardziej po lewej stronie. Warunek liczba <= -200 && liczba < -100 jest dodatkowo logicznie źle ustawiony dla tego zadania, bo dopuszcza wartości poniżej -200, a odrzuca np. -150, która powinna przejść. Moim zdaniem najlepsza metoda kontroli to podstawienie kilku wartości testowych: -200, -150, -100 i -250. Od razu widać, czy granice oraz operatory zostały dobrane sensownie.