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.
Así es como 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 ventaja de usar enumeraciones con sentencias switch es que Dart puede verificar que hayas gestionado todos los valores posibles de la enumeración. Si olvidas incluir un caso para uno de los valores de la enumeración, Dart te avisará, lo que ayuda 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 mediante enumeraciones y sentencias switch. Tu tarea es:
- Define una enumeración llamada
CharacterStatecon los siguientes valores:idle,walking,running,jumpingyattacking - 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 texto basado en el estado mediante 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
currentStateaCharacterState.walking - Imprime el mensaje del estado actualizado con el formato exacto:
Updated state: Character is moving slowly - Cambia
currentStateaCharacterState.attacking - Imprime el mensaje del estado final con el formato exacto:
Final state: Character is fighting
Tu programa debe demostrar el uso correcto de las enumeraciones con sentencias switch, mostrando cómo esta combinación proporciona una gestión del estado con seguridad de tipos. La sentencia switch debe gestionar todos los valores de la enumeración y devolver el mensaje adecuado para cada estado del personaje. Asegúrate de seguir las convenciones de nomenclatura de Dart y de utilizar los mensajes de texto exactos especificados anteriormente.
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áforoPractica por tu cuenta: Compilador de Dart online