Dart prend-il en charge les énumérations? Par exemple:
enum myFruitEnum { Apple, Banana }
Une recherche rapide des documents suggère que non.
Dart prend-il en charge les énumérations? Par exemple:
enum myFruitEnum { Apple, Banana }
Une recherche rapide des documents suggère que non.
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;
}
const
n'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 const
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]}');
}
[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.
Plus de détails dans ce projet https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
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.
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._();
}
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;
}
}
}
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 switch
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
}
Utilisez simplement le fichier de classe Types.
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.