J'ai parcouru le language documentation et il semble que le Google Dart ne supporte pas les mixins (pas de corps de méthode dans les interfaces, pas d'héritage multiple, pas de modules Ruby-like). Ai-je raison à ce sujet, ou y a-t-il une autre façon d'avoir une fonctionnalité de type mixin dans Dart?Est-ce que Google Dart prend en charge les mixins?
Répondre
Je suis heureux de signaler que la la réponse est maintenant Oui!
Un mixin est vraiment juste le delta entre une sous-classe et une superclasse. Vous pouvez ensuite "mélanger" ce delta à une autre classe.
Par exemple, considérons cette classe abstraite:
abstract class Persistence {
void save(String filename) {
print('saving the object as ${toJson()}');
}
void load(String filename) {
print('loading from $filename');
}
Object toJson();
}
Vous pouvez ensuite mélanger cela dans d'autres classes, évitant ainsi la pollution de l'arbre d'héritage.
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};
}
}
Restrictions sur les définitions mixins comprennent:
- Ne doit pas déclarer un constructeur
- superclasse est un objet
- Ne contient pas d'appels à super
Quelques lectures complémentaires:
Non, il ne supporte pas les mix-ins (encore): https://groups.google.com/a/dartlang.org/group/misc/msg/0865bc828bc248e4
Edit:
L'équipe Dart ont maintenant released their proposal for Mixins, l'issue for Mixins was here d'origine.
Il est pas encore mis en œuvre, mais en attendant, je l'ai sorti une bibliothèque Mixins extensible pour Dart qui comprend un port de la populaire bibliothèque d'utilitaires fonctionnelle Underscore.js: https://github.com/mythz/DartMixins
- 1. Le convertisseur JavaScript de Google Dart prend-il en charge les anciens navigateurs?
- 2. Est-ce que Google Closure prend en charge l'accordéon?
- 3. Est-ce que MapKit prend en charge Google StreetView
- 4. Est-ce que google TV prend en charge C2DM?
- 5. Google Chrome prend-il en charge socket.io?
- 6. Google Maps prend en charge les appareils mobiles
- 7. Est-ce que Imagick prend en charge les dégradés radiaux?
- 8. Est-ce que vsee prend en charge les navigateurs mobiles?
- 9. Est-ce que MDA prend en charge les crochets Cordova?
- 10. Est-ce que Scalatest prend en charge les hypothèses?
- 11. couleurs que Apple prend en charge pour les boutons arrondis
- 12. Est-ce que Cassandra prend en charge les requêtes conditionnelles?
- 13. Est-ce que AutoHotKey prend en charge les contrôles Infragistics?
- 14. Est-ce que Google Chart prend en charge les caractères UTF-8?
- 15. Est-ce que Google App Engine prend en charge SSL pour les applications hébergées sur mydomain.com?
- 16. Google App Engine ne prend pas en charge les caractères spéciaux tels que la livre britannique
- 17. Est-ce que Google App Engine prend en charge les API JAVA Proxy?
- 18. Est-ce que Google App Engine prend en charge les domaines sans cookie?
- 19. Est-ce que dotConnect pour SQLite prend en charge Mono?
- 20. Est-ce que Android Wear prend en charge l'achat d'applications?
- 21. Google App Engine prend-il en charge FTP?
- 22. Est-ce que FUSE ESB prend en charge RabbitMQ?
- 23. Détecter si le navigateur prend en charge Google Graphiques
- 24. Est-ce que GWT 1.7 prend en charge Class.getSimpleName()?
- 25. Pourquoi Google Chrome prend-il toujours en charge __proto__?
- 26. Oracle prend-il en charge les événements?
- 27. Quel contrôle prend en charge les modèles?
- 28. Google App Engine prend-il en charge PHP?
- 29. Le moteur de l'application Google prend-il en charge JDBC?
- 30. j2me prend en charge les téléphones Android
vous pouvez mettre à jour la réponse correcte :) actuellement –