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.

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.

challenge icon

Desafío

Fácil

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

  1. Define una enumeración llamada 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 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"
  4. Imprime el mensaje del estado inicial usando la función con el formato exacto: Initial state: Character is standing still
  5. Cambia currentState a CharacterState.walking
  6. Imprime el mensaje del estado actualizado con el formato exacto: Updated state: Character is moving slowly
  7. Cambia 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 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
}
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

Practica por tu cuenta: Compilador de Dart online