L'expression conditionnelle obscure
Le « flip-flop » est une expression conditionnelle qui cache un état « ON/OFF ». Ruby la différencie d’un Range
quand elle est utilisée dans une expression de contrôle (if
, while
, !
, …). Le format est (condition turn ON) .. (condition turn OFF)
.
Voici l’équivalent du code précédent sans le « flip-flop » pour bien appréhender comment il fonctionne.
On est retombé dessus lors d’un exercice demandant d’afficher les températures lorsque le système de refroidissement est en fonctionnement. Celui ci s’allume lorsque la température dépasse 40° et s’éteint quand elle redescend sous les 30°. Facile avec le « flip-flop » !
Bien sûr il ne faut pas en abuser… Un exemple trouvé sur le net au célèbre problème fizz-buzz avec le « flip-flop » (et sans l’opérateur modulo !). Vous pouvez remarquer un Range
exclusif qui retarde le condition turn OFF
à la prochaine itération.
Il a d’ailleurs failli être supprimé en commençant par un warning sur son utilisation en 2.6, mais finalement conservé car utilisé par un certain nombre d’entre nous (https://bugs.ruby-lang.org/issues/5400). Et vous ?
Le lien vers la documentation Ruby du flip-flop.