Enums en sentencias 'switch'
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 61 de 65.
Una de las aplicaciones más potentes de los enums es su uso con sentencias switch. Al combinar enums con sentencias switch, se crea un código que es a la vez más seguro y más fácil de mantener.
Aquí tienes cómo puedes usar un enum en una sentencia switch:
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}La belleza de usar enums con sentencias switch es que Dart puede verificar que hayas manejado todos los valores posibles del enum. Si olvidas incluir un case para uno de los valores del enum, Dart te avisará, ayudando a prevenir errores en tu código.
Este enfoque es mucho más seguro que usar cadenas o números en sentencias switch, donde los errores tipográficos podrían causar un comportamiento inesperado. Con los enums, obtienes una comprobación en tiempo de compilación que garantiza que tu código maneje cada escenario posible.
Desafío
FácilCrea un programa que gestione el estado de un personaje de juego utilizando enums y sentencias switch. Tu tarea es:
- Define un enum llamado
CharacterStatecon los siguientes valores:idle,walking,running,jumping, yattacking - Crea una variable llamada
currentStatede tipoCharacterStatey asígnale el valorCharacterState.idle - Crea una función llamada
getStateMessageque reciba un parámetroCharacterStatey devuelva un mensaje de cadena basado en el estado utilizando una sentencia switch: - Para
CharacterState.idle: devuelve"Character is standing still" - Para
CharacterState.walking: devuelve"Character is moving slowly" - Para
CharacterState.running: devuelve"Character is moving quickly" - Para
CharacterState.jumping: devuelve"Character is in the air" - Para
CharacterState.attacking: devuelve"Character is fighting" - Imprime el mensaje del estado inicial usando la función con el formato exacto:
Initial state: Character is standing still - Cambia el
currentStateaCharacterState.walking - Imprime el mensaje del estado actualizado con el formato exacto:
Updated state: Character is moving slowly - Cambia el
currentStateaCharacterState.attacking - Imprime el mensaje del estado final con el formato exacto:
Final state: Character is fighting
Tu programa debe demostrar el uso adecuado de enums con sentencias switch, mostrando cómo esta combinación proporciona una gestión de estados segura en cuanto a tipos. La sentencia switch debe manejar todos los valores del enum y devolver el mensaje apropiado para cada estado del personaje. Asegúrate de seguir las convenciones de nomenclatura de Dart y usar los mensajes de cadena exactos especificados anteriormente.
Hoja de referencia
Los enums funcionan bien con las sentencias switch para obtener un código con seguridad de tipos:
enum Status {
pending,
running,
completed
}
Status currentStatus = Status.pending;
switch (currentStatus) {
case Status.pending:
print('Task is waiting to start');
break;
case Status.running:
print('Task is currently in progress');
break;
case Status.completed:
print('Task has been finished');
break;
}Dart verifica que todos los valores del enum se manejen en la sentencia switch, evitando errores y proporcionando comprobación en tiempo de compilación.
Pruébalo tú mismo
import 'dart:io';
// TODO: Define tu enum CharacterState aquí
// TODO: Crea tu función getStateMessage aquí
void main() {
// TODO: Escribe tu código abajo
// Crea la variable currentState y asígnale CharacterState.idle
// Imprime el mensaje del estado inicial
// Cambia currentState a CharacterState.walking
// Imprime el mensaje del estado actualizado
// Cambia currentState a CharacterState.attacking
// Imprime el mensaje del estado final
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única6Manejo básico de errores
¿Qué son las excepciones?El bloque 'try-catch'Capturar excepciones con 'on'El bloque 'finally'Lanzar una excepciónResumen - División segura9Enumeraciones (Enums)
¿Qué son los Enums?Definir un Enum simpleUso de Enums en variablesEnums en sentencias 'switch'Resumen - Semáforo