À partir de la 1.8 , vous pouvez utiliser des énumérations comme celle-ci:
enum Fruit {
apple, banana
}
main() {
var a = Fruit.apple;
switch (a) {
case Fruit.apple:
print('it is an apple');
break;
}
// get all the values of the enumsfor (List<Fruit> value in Fruit.values) {
print(value);
}
// get the second valueprint(Fruit.values[1]);
}
Ces constantes statiques au sein de la classe sont des constantes de temps de compilation, et cette classe peut maintenant être utilisée, par exemple, dans des switchinstructions:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print('Yes!');
break;
}
L'utilisation constn'est pas toujours possible (si l'énumération est construite avec des attributs qui ne peuvent pas l'être const). C'est pourquoi je ne l'ai pas utilisé dans ma réponse (bien que j'utilise parfois constenum dans mon code).
Alexandre Ardhuin
J'accepterai cette réponse car il sera certainement utile d'utiliser le type psuedo enum dans une instruction switch
BraveNewMath
2
@KaiSellgren Remarque Je pense que le guide de style a maintenant changé, donc les valeurs d'énumération devraient être en bas de cas de chameau au lieu de toutes les majuscules. Voir dartlang.org/articles/style-guide
Greg Lowe
2
Quoi List<Fruit> value?
Tom Russell
1
Vous for (Fruit value in Fruit.values)
vouliez
9
Avec r41815 Dart a le support natif d'Enum voir http://dartbug.com/21416 et peut être utilisé comme
[Status.none, Status.running, Status.stopped, Status.paused]
valeur: Status.none, index: 0
valeur: Status.running, index: 1
valeur: Status.stopped, index: 2
value: Status.paused, index: 3 en
cours d'exécution: Status.running, 1
index en cours d'exécution: Status.running
Une limitation est qu'il n'est pas possible de définir des valeurs personnalisées pour un élément d'énumération, elles sont automatiquement numérotées.
Ceci et ceci peut être la réponse à votre question:
... for the technology preview it was decided to leave it out and just
use staticfinal fields for now. It may be added later.
Vous pouvez toujours faire quelque chose comme ceci:
interfaceConnectionState{ }
classConnectedimplementsConnectionState{ }
classConnectingimplementsConnectionState{ }
classDisconnectedimplementsConnectionState{ }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
ce qui est à mon avis plus clair à utiliser. C'est un peu plus difficile pour programmer la structure de l'application, mais dans certains cas, c'est mieux et clair.
Je pense que pour cet exemple, il serait préférable de laisser de côté l'interface et d'utiliser une classe. L'interface est une abstraction facultative et
BraveNewMath
3
L'énumération devrait être disponible à l'avenir. Mais jusqu'à ce qu'Enum ait atterri, vous pouvez faire quelque chose comme:
classFruit{
staticfinal APPLE = new Fruit._();
staticfinal BANANA = new Fruit._();
staticget values => [APPLE, BANANA];
Fruit._();
}
Je ne ferais pas ça comme ça moi-même. Je garderais le nom en majuscules comme Fruit.APPLE. Ensuite, si je voulais une sortie textuelle, j'aurais une carte qui les traduit ou une prise en charge de la langue séparément si je voulais également prendre en charge d'autres langues. Je pense aussi que les switchinstructions fonctionnent mieux sur les entiers, car elles peuvent ensuite être compilées en une table de saut.
Kai Sellgren
0
Oui! C'est en fait très utile de faire des Enums dans Dart:
Réponses:
À partir de la 1.8 , vous pouvez utiliser des énumérations comme celle-ci:
enum Fruit { apple, banana } main() { var a = Fruit.apple; switch (a) { case Fruit.apple: print('it is an apple'); break; } // get all the values of the enums for (List<Fruit> value in Fruit.values) { print(value); } // get the second value print(Fruit.values[1]); }
L'ancienne approche avant la 1.8:
class Fruit { static const APPLE = const Fruit._(0); static const BANANA = const Fruit._(1); static get values => [APPLE, BANANA]; final int value; const Fruit._(this.value); }
Ces constantes statiques au sein de la classe sont des constantes de temps de compilation, et cette classe peut maintenant être utilisée, par exemple, dans des
switch
instructions:var a = Fruit.APPLE; switch (a) { case Fruit.APPLE: print('Yes!'); break; }
la source
const
n'est pas toujours possible (si l'énumération est construite avec des attributs qui ne peuvent pas l'êtreconst
). C'est pourquoi je ne l'ai pas utilisé dans ma réponse (bien que j'utilise parfoisconst
enum dans mon code).List<Fruit> value
?for (Fruit value in Fruit.values)
Avec r41815 Dart a le support natif d'Enum voir http://dartbug.com/21416 et peut être utilisé comme
enum Status { none, running, stopped, paused } void main() { print(Status.values); Status.values.forEach((v) => print('value: $v, index: ${v.index}')); print('running: ${Status.running}, ${Status.running.index}'); print('running index: ${Status.values[1]}'); }
Une limitation est qu'il n'est pas possible de définir des valeurs personnalisées pour un élément d'énumération, elles sont automatiquement numérotées.
Plus de détails dans ce projet https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
la source
Ceci et ceci peut être la réponse à votre question:
... for the technology preview it was decided to leave it out and just use static final fields for now. It may be added later.
Vous pouvez toujours faire quelque chose comme ceci:
interface ConnectionState { } class Connected implements ConnectionState { } class Connecting implements ConnectionState { } class Disconnected implements ConnectionState { } //later ConnectionState connectionState; if (connectionState is Connecting) { ... }
ce qui est à mon avis plus clair à utiliser. C'est un peu plus difficile pour programmer la structure de l'application, mais dans certains cas, c'est mieux et clair.
la source
L'énumération devrait être disponible à l'avenir. Mais jusqu'à ce qu'Enum ait atterri, vous pouvez faire quelque chose comme:
class Fruit { static final APPLE = new Fruit._(); static final BANANA = new Fruit._(); static get values => [APPLE, BANANA]; Fruit._(); }
la source
que diriez-vous de cette approche:
class FruitEnums { static const String Apple = "Apple"; static const String Banana = "Banana"; } class EnumUsageExample { void DoSomething(){ var fruit = FruitEnums.Apple; String message; switch(fruit){ case(FruitEnums.Apple): message = "Now slicing $fruit."; break; default: message = "Now slicing $fruit via default case."; break; } } }
la source
Fruit.APPLE
. Ensuite, si je voulais une sortie textuelle, j'aurais une carte qui les traduit ou une prise en charge de la langue séparément si je voulais également prendre en charge d'autres langues. Je pense aussi que lesswitch
instructions fonctionnent mieux sur les entiers, car elles peuvent ensuite être compilées en une table de saut.Oui! C'est en fait très utile de faire des Enums dans Dart:
enum fruits{ BANANA, APPLE, ORANGE }
la source
Utilisez simplement le fichier de classe Types.
Types de fléchettes
facile, rapide, plus puissant et plus utile.
petit problème, c'est cette classe limitée à cinq Choix Différents et plus un pour les actes comme nul.
la source