Caso e intervalli in Ruby

Mehdi Farsi

Follow

22 luglio, 2019 – 3 min read

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’istruzione case e la clausola when.

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à!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *