W tym artykule zamierzamy zbadać następujące tematy:
- Operator
..
- Operator …
- Zakresy i wartości zmiennoprzecinkowe
Zapraszamy do lektury. free to read the
Case statement behind the scene
article if you’re not familiar with thecase
statement and thewhen
clause.
Przed rozpoczęciem
Jestem zachwycony, że mogę podzielić się z Wami naszym najnowszym projektem: Fun Facts about Ruby – Volume 1
Zapraszam do rozpowszechniania informacji i dzielenia się tym wpisem! 🙏
Dziękuję za Twój czas!
W instrukcji case
klauzule when
mogą przyjmować zakres jako parametr
Tutaj, instrukcja case
przyjmuje jako parametr liczbę całkowitą.
Jako, że klauzula when
przyjmuje zakres jako parametr to wywoływany jest operator Range#===
, który sprawdza czy liczba całkowita jest zawarta w zakresie.
Operator ..
w naszym zakresie zapewnia, że lewy i prawy operand są zawarte w zakresie.
Druga klauzula when
przyjmuje zakres używając operatora ….
To oznacza, że prawy operand nie jest zawarty w zakresie.
Teraz, gdy jesteśmy bardziej zaznajomieni z klauzulą when
i zakresami, rozbijmy przypadek brzegowy, który napotkałem używając zmiennych i zakresów.
Zakres wartości zmiennych i klauzula when
Jak widzieliśmy w powyższym przykładzie, operator … wyklucza prawy operand zakresu. Ale co, jeśli chcę wykluczyć lewy operand?
Tutaj, przetwarzana jest tylko zawartość pierwszej klauzuli when
, która pasuje do wartości surface
– w naszym przypadku when 70..90 then :second_value
.
W tym przypadku instrukcja case
zwraca :second_value
.
Tak więc następna klauzula when
nigdy nie jest oceniana dla surface
z 90
.
To działa dobrze dla zakresu liczb całkowitych.
Ale co, jeśli mamy do czynienia z zakresem pływaków?
Tutaj, instrukcja case zwraca :third_value
ponieważ surface
jest ściśle większy niż 130.0
.
Jeśli ponownie przypiszemy surface = 130.0
to nasza instrukcja case
zwraca :second_value
– tak samo jak zakresy liczb całkowitych.
Zauważmy, że używamy stałej Float::INFINITY
aby zakończyć nasz ostatni zakres.
Jest to równoważne każdej wartości powyżej 130.0
.
Na koniec przyjrzyjmy się pojęciu nieskończonych zakresów – Pojęcie to zostało wprowadzone w Ruby 2.6.0.
W linii 6 zakres jawnie pomija prawy operand.
Ruby interpretuje to następująco: 130..Float::INFINITY
To pozwala nam uniknąć niejawnego wywołania Float::INFINITY
w celu zakończenia naszego zakresu.
Więc tutaj, wartość surface
pasuje do tego porównania, a instrukcja case
zwraca :third_value
.
Voilà!
.