if !
L'opérateur ! retourne un Bool qui résulte de la négation de la véracité d'une valeur.
Quand utilisé dans un if en conjontion avec une variable, is_a?, responds_to? ou nil?
le compilateur restreindra les types en conséquence:
a = une_condition ? nil : 3
if !a
# ici a est Nil parce-que a est faux dans cette branche
else
# ici a est Int32, parce-que a est vraie dans cette branche
end
b = une_condition ? 1 : "x"
if !b.is_a?(Int32)
# ici b est String parce-que ce n'est pas un Int32
end