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.
Desafio
FácilCrie um programa que gerencie o estado de um personagem de jogo usando enums e instruções switch. Sua tarefa é:
- Definir um enum chamado
CharacterStatecom os seguintes valores:idle,walking,running,jumping, eattacking - Criar uma variável chamada
currentStatedo tipoCharacterStatee atribuir a ela o valorCharacterState.idle - Criar uma função chamada
getStateMessageque recebe um parâmetroCharacterStatee 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" - Imprimir a mensagem de estado inicial usando a função com o formato exato:
Initial state: Character is standing still - Alterar o
currentStateparaCharacterState.walking - Imprimir a mensagem de estado atualizada com o formato exato:
Updated state: Character is moving slowly - Alterar o
currentStateparaCharacterState.attacking - 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
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos6Tratamento de Erros Básico
O que são Exceções?O Bloco 'try-catch'Capturando Exceções com 'on'O Bloco 'finally'Lançando uma ExceçãoRecapitulação - Divisão Segura9Enumerações (Enums)
O que são Enums?Definindo um Enum simplesUsando Enums em variáveisEnums em instruções 'switch'Recapitulação - Semáforo