mercredi 6 août 2008

Classe Struct en Ruby

Je suis récemment tombé (par hasard, pour changer...) sur une classe de Ruby pour le moins rare : Struct. Basiquement, il s'agit d'une classe permettant d'implémenter rapidement des conteneurs simples, et fixés. Par rapport à un Hash, il n'est possible que de passer des symboles comme clefs, et il n'est pas permis d'ajouter de nouvelles clefs après déclaration. Struct possède également moins de méthodes que Hash, mais conserve les plus importantes (celles héritées d'Enumerable).

J'avoue être assez surpris par l'existence de cette classe. D'une part, parce que je ne l'ai rencontrée dans aucun code Ruby. Jamais. Ensuite parce qu'elle semble assez peu intéressante par rapport à un hachage (hormis pour l'aspect "déclaré" et "fixé" de ses clefs). Enfin, parce qu'elle n'apporte pas à priori de meilleures performances qu'un hachage (car elle est implémentée avec... eh voui...).

Deux liens sur cette classe :

Enfin, encore un côté surprenant, les clefs d'une structure ne semblent pas en être des attributs...



Fiche = Struct.new(:nom, :prenom, :adresse, :phone)

# Exemple d'initialisation
roger = Fiche.new "Dupont", "Roger", \
"3 rue des Lilas, \
55555 Canardville", \
"0800555222"

p roger
#=> #struct Fiche nom="Dupont", prenom="Roger",
# adresse="3 rue des Lilas, 55555 Canardville",
# phone="0800555222">

chuck = Fiche.new

chuck.prenom = "Chuck"

puts chuck.prenom
#=> Chuck

class Fiche
def foo
puts @prenom

end

def bar
puts self.prenom
end
end

chuck.foo
#=> nil

chuck.bar
#=> Chuck

1 commentaires:

Lefty a dit…

le hash, ça me fait penser non pas à une plante médicinale mais à un groupe de rock, surnommé "Moulu Haché", en fait "Molly Hatchett", ancêtre des groupes de métal.

le rapport avec le post?

ben, il n'y en a pas.