

In questo articolo, esploreremo i seguenti argomenti:
- L’operatore
..
- L’operatore …
- Gamme e valori fluttuanti
Sentitevi libero di leggere l’articolo
Case statement behind the scene
se non avete familiarità con l’istruzionecase
e la clausolawhen
.
Prima di iniziare
Sono entusiasta di condividere con voi il nostro ultimo progetto: Fun Facts about Ruby – Volume 1
Sentitevi liberi di spargere la voce e condividere questo post! 🙏
Grazie per il tuo tempo!
In una dichiarazione case
le clausole when
possono prendere un range come parametro
Ecco, l’istruzione case
prende un intero come parametro.
Come la clausola when
prende un intervallo come parametro, allora l’operatore Range#===
viene invocato e controlla se l’intero è incluso nell’intervallo.
L’operatore ..
nel nostro range assicura che gli operandi di sinistra e di destra siano inclusi nel range.
La seconda clausola when
prende un range usando l’operatore ….
Questo significa che l’operando di destra non è incluso nel range.
Ora che abbiamo più familiarità con la clausola when
e gli intervalli, analizziamo un caso limite che ho incontrato usando i float e gli intervalli.
Gamma di valori floating e la clausola when
Come abbiamo visto nell’esempio precedente, l’operatore … esclude l’operando destro dell’intervallo. Ma cosa succede se voglio escludere l’operando sinistro?
Qui, solo il contenuto della prima clausola when
che corrisponde al valore surface
viene elaborato – nel nostro caso when 70..90 then :second_value
.
In questo caso, l’istruzione case
restituisce :second_value
.
Quindi la prossima clausola when
non viene mai valutata per un surface
di 90
.
Questo funziona bene per un intervallo di interi.
Ma cosa succede se abbiamo a che fare con un intervallo di float?
Qui, la dichiarazione del caso restituisce :third_value
come surface
è strettamente maggiore di 130.0
.
se riassegniamo surface = 130.0
allora la nostra dichiarazione case
restituisce :second_value
– come gli intervalli di interi.
Nota che usiamo la costante Float::INFINITY
per terminare il nostro ultimo intervallo.
Questo è equivalente a qualsiasi valore superiore a 130.0
.
Finalmente diamo un’occhiata alla nozione di intervallo infinito – Questa nozione è stata introdotta in Ruby 2.6.0.
Nella linea 6, l’intervallo omette esplicitamente l’operando destro.
Ruby lo interpreta come segue: 130..Float::INFINITY
Questo ci permette di evitare di chiamare implicitamente il Float::INFINITY
per finire il nostro intervallo.
Quindi, il valore di surface
corrisponde a questo confronto e l’istruzione case
restituisce :third_value
.
Voilà!