0018 Flip_flop

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).

0018-flip_flop_1.png

Voici l’équivalent du code précédent sans le « flip-flop » pour bien appréhender comment il fonctionne.

0018-flip_flop_2.png

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

0018-flip_flop_3.png

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.

0018-flip_flop_4.png

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.