State machine
Em sistemas reais, um pedido não pode pular de 'pendente' para 'entregue' sem passar pelos estágios intermediários. Máquinas de estado resolvem isso definindo regras claras de transição, evitando estados inválidos e bugs difíceis de rastrear. Você encontra esse padrão em fluxos de pagamento, jogos (fases de personagem) e interfaces com etapas obrigatórias.
O PROBLEMA
Implemente máquina de estados para pedido: pendente → confirmado → enviado → entregue.
EXEMPLO
pedido.estado → "pendente"
pedido.transicionar("confirmar") → "confirmado"SOBRE O CONCEITO
Uma máquina de estados é um modelo onde um objeto só pode estar em um estado por vez e só muda seguindo regras pré-definidas. No exercício, usamos um objeto de configuração (const transicoes = { pendente: ['confirmar'], ... }) que mapeia cada estado para as ações permitidas. O erro comum é não validar a transição: se o código tentar transicionar('enviar') a partir de 'pendente', deve lançar um erro (com throw) para impedir o estado inválido. Usar includes na array de ações válidas resolve isso de forma limpa, sem if/else extensos.
RESOLUÇÃO