Bonjour,
Une structure m'a tout l'air de ressembler a une class.
Qu'est ce qui les differencie vraiment?
Dans quelles circonstances on les utilise?
D'avance merci.
Bonjour,
Une structure m'a tout l'air de ressembler a une class.
Qu'est ce qui les differencie vraiment?
Dans quelles circonstances on les utilise?
D'avance merci.
Hello,
Dans les langages classiques, une structure est un type de données composé de plusieurs champs (variables) de différents types y compris d'autres types de données composé.
A la base, le type structure est très proche du type classe. D'ailleurs en C++, on peut tout à fait ajouter des méthodes à une structure si mes souvenirs sont bons, ce qui en fait réellement une pseudo classe.
En Ruby, les types de données sont définis par des classes donc la structure n'est pas un type en tant que tel, mais peut être facilement émulée par une classe contenant d'autres variables et pas de méthode (exception faite des méthodes d'accès R/W à ces attributs dans le cas de Ruby, bien sûr).
La librairie struct propose simplement un moyen plus concis de déclarer ce type de classe qui ne contient que des attributs et pas de méthode.
Bref, en POO, la structure ne s'utilise pas très couramment. A réserver aux classes dont seuls les attributs nous intéresse.
La classe Struct est un générateur de classe. Son constructeur créé des classes à la volée contenant uniquement des méthodes d'accès aux attributs spécifiés en argument. La classe ainsi obtenue peut être utilisée pour instancier des objets qui auront les méthodes correspondantes.
Struct permet d'obtenir simplement et surtout dynamiquement des classes sans avoir à les définir explicitement dans le code.
Ainsi,
peut être remplacé par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class MaClasse attr_accessor :nom, :prenom end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MaClasse = Struct.new(:nom,:prenom)
Oui, mais c'est également possible avec une Class toute bête :Struct permet d'obtenir simplement et surtout dynamiquement des classes sans avoir à les définir explicitement dans le code.
Ok, Struct rajoute quelques méthodes qui peuvent sûrement s'avérer utiles, mais honnêtement j'ai jamais vu personne l'utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 MaClasse = Class.new => MaClasse >> MaClasse.send(:attr_accessor, :nom, :prenom) # attr_accessor est une méthode privée, donc on est obligé d'utiliser send() => nil >> a = MaClasse.new => #< MaClasse:0x35e88c> >> a.nom => nil >> a.nom = "Albert" => "Albert" >> a.nom => "Albert"
Toute la documentation Ruby on Rails : gotapi.com/rubyrails
Mes articles :
> HAML : langage de template pour Ruby on Rails
Il y a aussi la classe OpenStruct qui fait la même chose qu'une Struct, mais sans avoir besoin de déclarer les variables d'instance.
En gros, c'est un Hash déguisé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 require 'ostruct' ostruct = OpenStruct.new ostruct.var = 100 ostruct.truc = 1 p ostruct.var + ostruct.truc #=>101 p ostruct.instance_variable_get(:@table) {:truc=>1, :var=>100}
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager