Poprawne wyrażenie to (liczba >= -200) && (liczba < -100), bo dokładnie odwzorowuje zapis matematyczny przedziału jednostronnie domkniętego <-200, -100). W matematyce nawias kwadratowy oznacza, że granica jest włączona do przedziału, a nawias okrągły – że granica jest wyłączona. Czyli chcemy wszystkie liczby większe lub równe -200, ale jednocześnie mniejsze niż -100. W JavaScript przekłada się to właśnie na dwa porównania połączone operatorem logicznym AND, czyli &&. Warunek liczba >= -200 pilnuje dolnej granicy, a liczba < -100 pilnuje górnej, która jest otwarta. Jeśli którakolwiek z tych części będzie fałszywa, całe wyrażenie zwróci false, co jest dokładnie tym, czego oczekujemy przy opisie takiego przedziału. W praktyce taki zapis pojawia się bardzo często, np. przy walidacji danych wejściowych, filtrowaniu wyników, ustawianiu zakresów sliderów w interfejsie użytkownika albo przy sprawdzaniu warunków w grach (np. pozycja x obiektu ma być w jakimś zakresie). Przykład w JS: if (liczba >= -200 && liczba < -100) { // wykonaj kod tylko dla liczb z tego zakresu } Moim zdaniem warto od razu wyrobić sobie nawyk zapisywania zakresów w postaci dwóch prostych porównań połączonych &&, bo to jest czytelne dla innych programistów i zgodne z powszechną praktyką w branży. W wielu językach (nie tylko JavaScript, ale też C, Java, PHP) taki schemat warunków jest standardem. Trzeba też pamiętać, że w JS nie ma osobnego operatora „przedziału”, więc zawsze rozbijamy to właśnie na takie składowe porównania logiczne.
W tym zadaniu chodzi o poprawne odwzorowanie zapisu matematycznego przedziału <-200, -100) w postaci wyrażenia logicznego w JavaScript. Taki przedział oznacza wszystkie liczby od -200 włącznie do -100, ale już bez samego -100. W praktyce bardzo często myli się tutaj zarówno kierunek nierówności, jak i to, czy dana granica ma być domknięta (z „=”) czy otwarta. Dobrze jest sobie w myślach przetłumaczyć zapis matematyczny na zwykłe zdanie po polsku i dopiero potem na kod. Jednym z typowych błędów jest napisanie warunku w stylu „(liczba -100)”. Taki zapis w JavaScript w ogóle nie jest wyrażeniem logicznym, tylko zwykłym działaniem arytmetycznym: odejmujemy 100 od zmiennej liczba. Wynik będzie jakąś wartością liczbową, a nie true/false. Oczywiście JS potrafi w instrukcji if potraktować liczbę jako wartość logiczną, ale to kompletnie nie o to chodzi. To raczej efekt uboczny mechanizmu truthy/falsy, a nie poprawne projektowanie warunków. W profesjonalnym kodzie zawsze stosujemy jawne operatory porównania, typu >=, <=, >, <. Inny częsty błąd to użycie operatora || (lub) zamiast && (i). Warunek (liczba >= -200) || (liczba > -100) obejmie praktycznie wszystkie liczby większe lub równe -200, bo druga część (liczba > -100) będzie prawdziwa dla wszystkich liczb większych niż -100, w tym dodatnich. Operator OR mówi: wystarczy, że jedna z części jest prawdziwa. A my chcemy jednocześnie spełnienia obu warunków, czyli typowy AND. W efekcie taki zapis totalnie rozwala zakres i nie ma już nic wspólnego z przedziałem domknięto-otwartym. Pojawia się też pokusa, żeby użyć złych kierunków nierówności albo pomylić się przy interpretacji, że liczby są ujemne. Na przykład zapis (liczba <= -200) && (liczba < -100) łapie liczby mniejsze lub równe -200, czyli bardziej „w lewo” na osi, niż nas interesuje. Dodatkowo oba warunki są skierowane w stronę -∞, więc zamiast ograniczonego przedziału dostajemy tak naprawdę wszystkie liczby mniejsze lub równe -200. To wynika często z automatycznego kopiowania schematu bez zastanowienia, czy naprawdę odzwierciedla on to, co mieliśmy w matematyce. Z mojego doświadczenia dobrym nawykiem jest rozpisanie sobie na boku: "chcę liczby większe lub równe dolnej granicy" oraz "chcę liczby mniejsze (lub mniejsze/równe) od górnej granicy" i dopiero potem łączenie tego operatorem &&. Pozwala to uniknąć typowych pomyłek z kierunkiem strzałek i złym użyciem ||, które w warunkach zakresowych prawie nigdy nie jest tym, czego naprawdę potrzebujemy.