Le double bang en Ruby
Ou encore !!, ou double point d’exclamation
On peut voir ici ou là ce genre de code Ruby:
!!expression
-C’est un truc qui n’est d’ailleurs pas spécifique au langage Ruby- Pourquoi voudrait-on écrire ça ?
Le !
(not) fait une négation booléenne. Donc si une expression est true
,
cela va donner false
, et inversement, si une expression est false
, cela
va donner true
. Exemple:
Donc le !!
est la négation booléenne d’une négation booléenne! Hum, ça
a l’air un peu inutile, hein:
Ce qu’il ne faut pas oublier, c’est qu’en Ruby, comme dans plein d’autres
langages, beaucoup de choses peuvent être true ou false.
La preuve pour true
:
En fait, toute valeur autre que false
ou nil
est considérée comme true
.
Et le corollaire: sont considérées comme false
les valeurs false
ou nil
.
On peut maintenant voir l’intérêt du !!
. Soit la classe suivante pour nous
servir d’exemple:
Bien que @connection
soit nil
ou un objet quelconque, je veux que
connected?
renvoit true
ou false
. Pour ça je peux écrire:
if @connection
true
else
false
end
ou bien encore:
@connection ? true : false
Mais le !!@connection
fonctionne tout aussi bien. Il est plus concis, et
surtout exprime bien le cast en booléen:
À demain.