Dart — Enums

2024-01-22T18:00:00-05:00 | 3 minutos de lectura | Actualizado en 2025-01-24T07:42:46-05:00

jaimetellezb
Dart — Enums

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.
  • Enum se extiende automáticamente.
  • No se pueden crear variables con el nombre values porque entra en conflicto con la propiedad de los enums.
  • Todos los casos de enums deben 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!

Fuentes

© 2022 - 2025 jaimetellezb - Compartir guías y tutoriales de programación.

🌱 Powered by Hugo with theme Dream.

Sobre mí

alt

Ingeniero de software

Hola, bienvenidos a mi blog sobre guías y tutoriales de programación.

Aquí podrás encontrar guías y tutoriales sobre algunos temas de tecnología en general. La idea es poder ayudar a que ciertas cosas como configuraciones de nuevas herramientas sean más fáciles de abordar y utilizar. También pequeños proyectos donde se usen diferentes tecnologías como ejemplo.

Enlaces sociales