Quelle est la différence entre les Mixins et les Traits ?
Selon Wikipedia Les modules Ruby sont en quelque sorte des traits de caractère. Comment cela se passe-t-il ?
Quelle est la différence entre les Mixins et les Traits ?
Selon Wikipedia Les modules Ruby sont en quelque sorte des traits de caractère. Comment cela se passe-t-il ?
Exposé sur les traits de caractère
ad 1. Dans les mixins, vous pouvez définir des variables d'instance. Les Traits ne le permettent pas. L'état doit être fourni par la classe de composition (=classe utilisant les traits).
ad 2. Il peut y avoir un conflit de nom. Deux mixins ( MA
y MB
) ou des traits ( TA
y TB
) définissent la méthode avec la même définition foo():void
.
Mixin MA {
foo():void {
print 'hello'
}
}
Mixin MB {
foo():void {
print 'bye'
}
}
Trait TA {
foo():void {
print 'hello'
}
}
Trait TB {
foo():void {
print 'bye'
}
}
Dans les mixins, les conflits liés à la composition de la classe C mixins MA, MB
sont résolus implicitement.
Class C mixins MA, MB {
bar():void {
foo();
}
}
Ceci appellera foo():void
de MA
En revanche, lors de l'utilisation des Traits, la classe de composition doit résoudre les conflits.
Class C mixins TA, TB {
bar():void {
foo();
}
}
Ce code soulèvera un conflit (deux définitions de foo():void
).
ad 3. La sémantique d'une méthode ne dépend pas du fait qu'elle soit définie dans un trait ou dans une classe qui utilise le trait.
En d'autres termes, il importe peu que la classe soit constituée des traits ou que le code des traits soit "copié-collé" dans la classe.
Ces pages expliquent la différence dans le langage de programmation D.
Dans ce contexte, les mixins sont du code généré à la volée, puis inséré à cet endroit du code lors de la compilation. C'est très pratique pour les DSL simples.
Les traits sont des valeurs externes à la compilation (plutôt que du code généré à partir d'une source externe). La différence est subtile. Les mixins ajoutent de la logique, les Traits ajoutent des données telles que des informations de type à la compilation.
Je ne connais pas grand chose à Ruby, mais j'espère que cela vous aidera un peu.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.