0014 Nonzero

Le contraire de zero?... Pas exactement!

Un point d’interrogation ne veut pas nécessairement dire un retour de type booléen. nonzero? fait partie des quelques exceptions à cette règle.

0014-nonzero_1.png

Elle retourne nil si 0, sinon self. Donc dans un sens oui, ce sont bien des méthodes opposées. Aucune différence si on les utilise dans une condition.

0014-nonzero_2.png

Mais non, cette différence permet un tout autre usage de la méthode nonzero?. Et c’est d’ailleurs la raison de sa création. On peut trouver dans ce fil Numeric#nonzero? behavior voulant retirer le ?, la note 14 retraçant son historique (très intéressant). Pour faire court, c’était pour considérer 0 comme une valeur false pour ce cas précis :

0014-nonzero_3.png

Bien que l’on puisse maintenant comparer des tableaux, nonzero? reste intéressante car elle permet un court-circuit.

Le lien vers la documentation Ruby de nonzero?.