Un truc (de plus) que j'aime en ruby
Par Christophe, lundi 13 novembre 2006 à 00:32 :: Développement :: #107 :: rss
class Ticket
def price=(amount)
if [Fixnum,Float].include? amount.class
@price = amount
else
puts "The price seems to be malformed"
end
end
end
Ce qui à pour incidence ceci (irb --simple-prompt powered):
>> Ticket.new.price = 22 => 22 >> Ticket.new.price = 'prix' The price seems to be malformed => "prix"
Petite explication pour ceux qui n'ont pas compris ce qui est intéressant :
Cet exemple montre que ruby permet de tester de façon transparente l'assignement d'une valeur à une méthode (qui se trouve dans un objet instancié dans le cas présent).
Ce code teste si amount est un nombre (entier ou flottant), et si oui, assigne cette valeur à price, ou affiche un message d'erreur. [1]
Toute l'astuce est dans la définition de la méthode price : def price=(amount) et du signe = qui n'est pas annodin. C'est lui qui permet de faire passer pour assignement banal de valeur, à l'appel d'une méthode, qui est bien price= et non pas price.
De plus, Ruby gère le fait que vous mettiez ou non un espace entre price et = quand vous voulez lui assigner une valeur, donc :
Ticket.new.price = 22 # est strictement équivalent à Ticket.new.price= 22
Notes
[1] if [Fixnum,Float].include? amount.class signifie "si le tableau qui contient les constantes Fixnum et Float inclu la valeur 'classe de amount'". Étant donné que tout est une objet en ruby, un nombre est soit un entier (Fixnum), soit un flottant (Float), ce que vous pouvez vérifier par vous même dans irb en tappant 0.class. Voir aussi Test de valeurs, PHP & Ruby

Commentaires
1. Le lundi 13 novembre 2006 à 08:22, par Matt.Rixx
2. Le lundi 13 novembre 2006 à 09:06, par Ben
3. Le lundi 13 novembre 2006 à 10:12, par pouype
4. Le lundi 13 novembre 2006 à 13:20, par geoffrey
5. Le lundi 13 novembre 2006 à 20:28, par Christophe
6. Le samedi 18 novembre 2006 à 00:30, par kik
7. Le samedi 18 novembre 2006 à 02:17, par Christophe
8. Le samedi 18 novembre 2006 à 08:52, par Matt.Rixx
9. Le samedi 18 novembre 2006 à 08:54, par Matt.Rixx
10. Le mercredi 22 novembre 2006 à 21:40, par kik
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.