mercredi 5 décembre 2007

Convention ! et ? en Ruby

Il y a une petite convention utile en Ruby, à propos du nom des méthodes, selon qu'il se termine par un "!" ou un "?".

?

Une méthode dont le nom finit par "?" est supposée renvoyer true ou false (un booléen quoi...). Par exemple, pour les String, la méthode include? :

"conscience".include? "science" #=> true
"conscience"
.include? "con" #=> true

"conscience".include? "morale" #=> false

!

Les méthodes avec un nom se terminant par "!" modifient leur receveur. Pas clair ? Exemple !

str = "Ernest le GRAND"
str.swapcase #=> "eRNEST LE grand"

str #=> "Ernest le GRAND"


Maintenant qu'on sait ce que fait swapcase (inversion de la casse, pour les plus amorphes...), avec un "!" :

str.swapcase! #=> "eRNEST LE grand"
str
#=> "eRNEST LE grand"

Vous l'aurez compris, le "!" indique une modification de l'objet qui appelle la méthode (le receveur quoi !).

Note :

Dans les deux cas, il s'agit d'une convention, pas d'une obligation : vous n'êtes pas obligés de mettre "?" à la fin de vos méthodes renvoyant un booléen, ni "!" quand vous modifiez l'objet. Et inversement, l'interpréteur ne vous enverra aucun warning si vous définissez quelque chose comme ceci (ou la même avec "?") :
class Fixnum
def
test!

a = self +10
a
end
# self n'a pas été modifié.
end
Simplement, ça aide la lisibilité des codes, et des docs : il est donc conseillé de la respecter dans la mesure du possible.

0 commentaires: