Case et plages en Ruby

.
Mehdi Farsi

Follow

22 juil, 2019 – 3 min de lecture

Dans cet article, nous allons explorer les sujets suivants :

  • L’opérateur ..
  • L’opérateur …
  • Les plages et les valeurs flottantes

N’hésitez pas à lire la rubrique . libre de lire l’article Case statement behind the scene si vous n’êtes pas familier avec l’instruction case et la clause when.

Avant de commencer

Je suis ravi de partager avec vous notre dernier projet : Fun Facts about Ruby – Volume 1

N’hésitez pas à faire passer le mot et à partager ce post ! 🙏

Merci de votre temps !

Dans une déclaration case les clauses when peuvent prendre une plage en paramètre

Ici, l’instruction case prend un entier en paramètre.

Comme la clause when prend une plage comme paramètre alors l’opérateur Range#=== est invoqué et il vérifie si l’entier est inclus dans la plage.

L’opérateur .. de notre plage permet de s’assurer que les opérandes gauche et droit sont inclus dans la plage.

La deuxième clause when prend une plage en utilisant l’opérateur ….

Cela signifie que l’opérande droit n’est pas inclus dans la plage.

Maintenant que nous sommes plus familiers avec la clause when et les plages, décomposons un cas limite que j’ai rencontré en utilisant des flottants et des plages.

Gamme de valeurs flottantes et la clause when

Comme nous l’avons vu dans l’exemple ci-dessus, l’opérateur … exclut l’opérande droit de la plage. Mais, que faire si je veux exclure l’opérande gauche ?

Ici, seul le contenu de la première clause when qui correspond à la valeur surface est traité – dans notre cas when 70..90 then :second_value.

Dans ce cas, l’instruction case renvoie :second_value.

Donc la clause suivante when n’est jamais évaluée pour une surface de 90.

Cela fonctionne bien pour une plage d’entiers.

Mais qu’en est-il si nous devons traiter une plage de flottants ?

Ici, l’instruction case retourne :third_value car surface est strictement supérieure à 130.0.

si nous réassignons surface = 130.0 alors notre instruction case renvoie :second_value – comme les plages d’entiers.

Notez que nous utilisons la constante Float::INFINITY pour terminer notre dernière plage.

Ceci est équivalent à toute valeur supérieure à 130.0.

Enfin, examinons la notion de plages sans fin – Cette notion a été introduite dans Ruby 2.6.0.

À la ligne 6, la plage omet explicitement l’opérande droit.

Ruby interprète cela comme suit : 130..Float::INFINITY

Cela nous permet d’éviter d’appeler implicitement le Float::INFINITY pour terminer notre plage.

Donc ici, la valeur de surface correspond à cette comparaison et l’instruction case retourne :third_value.

Voilà!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *