Tabla de Contenido
Introducción
Los enums o enumeraciones en los lenguajes de programación son un tipo de clase especial y sirven para representar un número fijo de valores constantes.
Enumeraciones (Enums)
En Dart, los enums extienden de la clase Enum, y nos sirven para agrupar conjuntos de valores como veremos más adelante.
Declarando simple enums
Para declarar una enumeración simple, debemos usar la palabra clave enum el nombre debe empezar con mayúscula y allí seguido una lista de valores a enumerar.
enum Color { red, greeen, blue }
enum DayOfWeek {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
}
Declarando enums mejorado
Dart también permite en las clases de enums declarar atributos, funciones y constructores.
Para declarar enums mejorados, se usa de la misma forma que las clases normales, con algunas particularidades:
- Las variables o atributos deben ser
final. - Todos los constructores deben ser constantes.
Enumse extiende automáticamente.- No se pueden crear variables con el nombre
valuesporque entra en conflicto con la propiedad de losenums. - Todos los casos de
enumsdeben ser declarados al principio.
Ejemplos que nos brinda la documentación de Dart.
// ejemplos
enum Status {
active(status: 'ACTIVE', subStatus: 'OPEN'),
inactive(status: 'INACTIVE', subStatus: 'CLOSE');
// variables del enum con final
final String status;
final String subStatus;
// Constructor del enum
const Status({required this.status, required this.subStatus});
}
// ejemplos de la documentación de Dart
enum Vehicle implements Comparable<Vehicle> {
car(tires: 4, passengers: 5, carbonPerKilometer: 400),
bus(tires: 6, passengers: 50, carbonPerKilometer: 800),
bicycle(tires: 2, passengers: 1, carbonPerKilometer: 0);
const Vehicle({
required this.tires,
required this.passengers,
required this.carbonPerKilometer,
});
final int tires;
final int passengers;
final int carbonPerKilometer;
int get carbonFootprint => (carbonPerKilometer / passengers).round();
bool get isTwoWheeled => this == Vehicle.bicycle;
@override
int compareTo(Vehicle other) => carbonFootprint - other.carbonFootprint;
}
enum LogPriority {
error(1, 'Error'),
warning(2, 'Warning'),
log.unknown('Log');
final String prefix;
final int priority;
const LogPriority(this.priority, this.prefix);
const LogPriority.unknown(String prefix) : this(-1, prefix);
}
Uso de enums
Para acceder al valor de los enums basta con colocar: <nombre_enum>.<atributo>.
void main() {
var active = Status.active;
print(active.status); // ACTIVE
print(active.subStatus); // OPEN
}
Los enums tiene como propiedad la propiedad index, que devuelve la posición de cada uno de los valores y empiezan desde 0.
void main() {
var active = Status.active;
print(active.index); // 0
}
Los enums también tienen otra propiedad values, que nos sirve para obtener todos los valores del enum el cual devuelve una lista.
void main() {
var statusValues = Status.values;
print(statusValues); // [Status.active, Status.inactive]
print(statusValues.last.status); // INACTIVE
// también podemos recorrerlos
statusValues.forEach(print);
}
También es muy común usar los enums para los Switch como vimos en flujos de control.
enum Month { january, february, march, april, may, june }
String getMonth(Month month) => switch (month) {
Month.january => 'Enero',
Month.february => 'Febrero',
Month.march => 'Marzo',
Month.april => 'Abril',
Month.may => 'Mayo',
Month.june => 'Junio'
};
void main() {
var june = getMonth(Month.june);
print(june); // JUNIO
}
Para acceder al valor de un enum, podemos utilizar la propiedad name.
enum Color { red, greeen, blue }
void main() {
// para acceder al valor utilizamos la propiedad name
print(Color.blue.name); // blue
}
Conclusión
Fue una vista muy general de lo que son los enums y su uso en Dart, puede ser de mucha utilidad cuando necesitemos valores estáticos o constantes dentro de nuestro programa.
¡Gracias por leer!
