Menu
Coddy logo textTech

Enums em instruções 'switch'

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 61 de 65.

Uma das aplicações mais poderosas de enums é usá-los com instruções switch. Ao combinar enums com instruções switch, você cria um código que é ao mesmo tempo mais seguro e mais fácil de manter.

Veja como você pode usar um enum em uma instrução 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;
}

A beleza de usar enums com instruções switch é que o Dart pode verificar se você tratou todos os valores possíveis do enum. Se você esquecer de incluir um case para um dos valores do enum, o Dart irá avisá-lo, ajudando a prevenir bugs em seu código.

Esta abordagem é muito mais segura do que usar strings ou números em instruções switch, onde erros de digitação podem causar comportamentos inesperados. Com enums, você obtém verificação em tempo de compilação que garante que seu código trate todos os cenários possíveis.

challenge icon

Desafio

Fácil

Crie um programa que gerencie o estado de um personagem de jogo usando enums e instruções switch. Sua tarefa é:

  1. Definir um enum chamado CharacterState com os seguintes valores: idle, walking, running, jumping, e attacking
  2. Criar uma variável chamada currentState do tipo CharacterState e atribuir a ela o valor CharacterState.idle
  3. Criar uma função chamada getStateMessage que recebe um parâmetro CharacterState e retorna uma mensagem de string baseada no estado usando uma instrução switch:
    • Para CharacterState.idle: retornar "Character is standing still"
    • Para CharacterState.walking: retornar "Character is moving slowly"
    • Para CharacterState.running: retornar "Character is moving quickly"
    • Para CharacterState.jumping: retornar "Character is in the air"
    • Para CharacterState.attacking: retornar "Character is fighting"
  4. Imprimir a mensagem de estado inicial usando a função com o formato exato: Initial state: Character is standing still
  5. Alterar o currentState para CharacterState.walking
  6. Imprimir a mensagem de estado atualizada com o formato exato: Updated state: Character is moving slowly
  7. Alterar o currentState para CharacterState.attacking
  8. Imprimir a mensagem de estado final com o formato exato: Final state: Character is fighting

Seu programa deve demonstrar o uso adequado de enums com instruções switch, mostrando como essa combinação fornece um gerenciamento de estado com segurança de tipos (type-safe). A instrução switch deve lidar com todos os valores do enum e retornar a mensagem apropriada para cada estado do personagem. Certifique-se de seguir as convenções de nomenclatura do Dart e usar exatamente as mensagens de string especificadas acima.

Folha de consulta

Enums funcionam bem com instruções switch para código com segurança 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;
}

O Dart verifica se todos os valores do enum são tratados na instrução switch, prevenindo bugs e fornecendo verificação em tempo de compilação.

Experimente você mesmo

import 'dart:io';

// TODO: Defina seu enum CharacterState aqui

// TODO: Crie sua função getStateMessage aqui

void main() {
  // TODO: Escreva seu código abaixo
  
  // Crie a variável currentState e atribua a ela CharacterState.idle
  
  // Imprima a mensagem de estado inicial
  
  // Altere currentState para CharacterState.walking
  
  // Imprima a mensagem de estado atualizada
  
  // Altere currentState para CharacterState.attacking
  
  // Imprima a mensagem de estado final
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo