Enumerados en Dart

Hoy vamos a hacer un breve repaso a cómo utilizar los enums o enumerados en Dart. Estos enums son un tipo especial de clase y se suele utilizar para representar un número fijo de valores constantes. 

Es decir, si quiero representar una serie de valores fijos en nuestra aplicación desarrollada con Flutter que después van a ser invocados desde diferentes partes del mismo pero que siempre van a tener ese mismo rango de valores, los enumerados es nuestra herramienta perfecta.

Usando enums en Dart

La forma de usar los enumerados en Dart o de definirlos es como sigue:

enum ViewState { loading, completed, failed}

Cada valor en un enum tiene un método getter de nombreindex, que devuelve la posición del valor dentro de todos los valores del enum, e igual que las listas el cero es el valor del primer componente del enum. Por ejemplo, el primer valor tiene el índice 0, y el segundo valor tiene el índice 1.

assert(ViewState.loading.index == 0); 
assert(ViewState.completed.index == 1); 
assert(ViewState.failed.index == 2);

Podemos iterar a través de todos los valores que componen un enum de forma fácil llamando a la constante values.

List<ViewState> states = ViewState.values;
 assert(states[2] == State.completed);

Una de las grandes ventajas de usar enums es que si en nuestro código poseemos alguna estructura de flujo tipo switch donde según un valor del enum se realiza una acción; si por cualquier circunstancia añadimos algún valor nuevo a ese enum, el compilador nos avisará con un warning advirtiendo que no hemos completado todos los posibles casos del enumerado.

 var aState = ViewState.loading;
    switch (aState) {
      case ViewState. loading:
        print('Loading');
        break;
      case ViewState.completed:
        print('Completed');
        break;
      default: // Sin esto, verás un WARNING. 
        print(aState); // 'ViewState. failed'
    }

Es algo muy útil para no dejarnos flujos por desarrollar o para no llevarnos un susto con el desarrollo en producción y que se quede colgado.

A pesar de ser muy útiles, los enums en Dart también tienen algunas restricciones como:

  • No se pueden heredar, es decir no permiten herencia
  • Tampoco permiten los mixins
  • Y tampoco es posible implementarles una interfaz
  • Aunque son un tipo de clase, no se pueden instanciar como una clase común.

Comparte si lo consideras interesante
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.