tutorial online method dartlang enums dart

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.