enums - online - dart types
¿Dart apoya las enumeraciones? (5)
¿Dart apoya las enumeraciones? Por ejemplo:
enum myFruitEnum { Apple, Banana }
Una búsqueda superficial de los documentos sugiere que no.
¿Qué tal este enfoque?
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;
}
}
}
A partir del 1.8 , puedes usar enumeraciones como esta:
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]);
}
El viejo enfoque antes de 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);
}
Esas constantes estáticas dentro de la clase son constantes de tiempo de compilación, y esta clase ahora se puede usar en, por ejemplo, declaraciones de switch
:
var a = Fruit.APPLE;
switch (a) {
case Fruit.APPLE:
print(''Yes!'');
break;
}
Con r41815 Dart tiene soporte nativo de Enum, vea http://dartbug.com/21416 y puede usarse como
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]
valor: Status.none, índice: 0
valor: Status.running, índice: 1
valor: Status.stopped, index: 2
valor: Status.paused, índice: 3
corriendo: Status.running, 1
índice en ejecución: estado.running
Una limitación es que no es posible establecer valores personalizados para un elemento enum, se numeran automáticamente.
Más detalles en este borrador https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf
La enumeración debería estar disponible en el futuro. Pero hasta que code.google.com/p/dart/issues/detail?id=88 , puedes hacer algo como:
class Fruit {
static final APPLE = new Fruit._();
static final BANANA = new Fruit._();
static get values => [APPLE, BANANA];
Fruit._();
}
code.google.com/p/dart/issues/detail?id=88 y this pueden ser las respuestas a su pregunta:
... for the technology preview it was decided to leave it out and just
use static final fields for now. It may be added later.
Todavía puedes hacer algo como esto:
interface ConnectionState { }
class Connected implements ConnectionState { }
class Connecting implements ConnectionState { }
class Disconnected implements ConnectionState { }
//later
ConnectionState connectionState;
if (connectionState is Connecting) { ... }
que en mi opinión es más claro para el uso. Es un poco más difícil programar la estructura de la aplicación, pero en algunos casos es mejor y más clara.