Ho sfogliato lo language documentation e sembra che Google Dart non supporti i mixins (nessun corpo del metodo nelle interfacce, nessuna ereditarietà multipla, nessun modulo simile a Ruby). Ho ragione su questo, o c'è un altro modo per avere funzionalità di tipo mixin in Dart?Google Dart supporta i mixaggi?
risposta
Sono felice di riferire che la la risposta è ora Sì!
Un mixin è in realtà solo il delta tra una sottoclasse e una superclasse. È quindi possibile "mescolare" quel delta a un'altra classe.
Ad esempio, si consideri questa classe astratta:
abstract class Persistence {
void save(String filename) {
print('saving the object as ${toJson()}');
}
void load(String filename) {
print('loading from $filename');
}
Object toJson();
}
È quindi possibile mescolare questo in altre classi, evitando così l'inquinamento del albero di ereditarietà.
abstract class Warrior extends Object with Persistence {
fight(Warrior other) {
// ...
}
}
class Ninja extends Warrior {
Map toJson() {
return {'throwing_stars': true};
}
}
class Zombie extends Warrior {
Map toJson() {
return {'eats_brains': true};
}
}
Restrizioni definizioni mixin includono:
- Non deve dichiarare un costruttore
- superclasse è Object
- Non contiene chiamate a Super
qualche lettura supplementare:
No, non supporta mix-ins (ancora): https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4
Edit:
Il team Dart ha ora released their proposal for Mixins, l'originale issue for Mixins was here.
Non è ancora implementato, ma nel frattempo ho rilasciato una libreria estendibile mixin per Dart, che include una porta del popolare libreria di utilità funzionale Underscore.js: https://github.com/mythz/DartMixins
si potrebbe desiderare di aggiornare la risposta corretta al momento :) –