Menu
Coddy logo textTech

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.

challenge icon

Desafío

Fácil

Crea un programa que gestione el estado de un personaje de juego utilizando enums y sentencias switch. Tu tarea es:

  1. Define un enum llamado CharacterState con los siguientes valores: idle, walking, running, jumping, y attacking
  2. Crea una variable llamada currentState de tipo CharacterState y asígnale el valor CharacterState.idle
  3. Crea una función llamada getStateMessage que reciba un parámetro CharacterState y 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"
  4. Imprime el mensaje del estado inicial usando la función con el formato exacto: Initial state: Character is standing still
  5. Cambia el currentState a CharacterState.walking
  6. Imprime el mensaje del estado actualizado con el formato exacto: Updated state: Character is moving slowly
  7. Cambia el currentState a CharacterState.attacking
  8. 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
}
quiz iconPonte a prueba

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