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.