Mobile App Development · Dart/Flutter

12 · Switch Case

O switch statement clássico (com case/break/default) e a switch expression moderna do Dart (com => e _) para lidar com múltiplas opções de decisão.

1Objetivo da aula

Aplicar switch para lidar com múltiplas opções de decisão de forma mais legível que um longo encadeamento de if/else if. Você vai ver as duas formas disponíveis em Dart: o switch statement tradicional, com case e break, e a switch expression, que retorna um valor diretamente usando =>.

2O que vamos aprender

switch (v) { case x: ... break; }

Switch statement clássico: cada case é um bloco de código; o break evita que a execução "caia" para o próximo case.

default:

Bloco executado quando nenhum case anterior corresponde ao valor testado.

switch (v) { x => resultado }

Switch expression (Dart 3+): cada linha mapeia um valor a um resultado e o switch inteiro retorna esse resultado diretamente.

_ => valor

Padrão coringa da switch expression — equivalente ao default do switch statement.

switch em String

O valor comparado não precisa ser int: um switch também funciona muito bem sobre String, como um perfil de usuário.

cond ? a : b

Qualquer expressão pode ficar à direita do => em uma switch expression, inclusive um operador ternário para validações.

break

Encerra o case atual no switch statement, impedindo que os cases seguintes também sejam executados.

Legibilidade

switch reduz encadeamentos longos de if/else if quando há vários valores fixos e conhecidos a comparar.

3Exemplo comentado

// Exemplo: switch statement (com 'case'/'break') e switch expression (com '=>').
void main() {
  // Switch statement: cada 'case' é um bloco de código; 'break' evita "fall-through".
  final diaSemana = 3;
  switch (diaSemana) {
    case 1:
      print('Domingo');
      break;
    case 2:
      print('Segunda-feira');
      break;
    case 3:
      print('Terca-feira');
      break;
    default:
      print('Dia invalido');
  }

  // Switch expression: retorna um valor diretamente, sem 'break' nem 'case' com dois-pontos.
  final String perfil = 'editor';
  final String acesso = switch (perfil) {
    'admin' => 'Acesso total ao sistema',
    'editor' => 'Pode criar e editar conteudos',
    'aluno' => 'Pode assistir aulas e resolver exercicios',
    _ => 'Perfil desconhecido',
  };
  print(acesso);

  // O 'arm' de uma switch expression pode conter qualquer expressão, inclusive ternário.
  final int a = 10;
  final int b = 0;
  final resultado = switch ('dividir') {
    'dividir' => b != 0 ? a / b : 'Erro: divisao por zero',
    _ => 'Operacao invalida',
  };
  print('Resultado: $resultado');
}

4Saída esperada

Terca-feira
Pode criar e editar conteudos
Resultado: Erro: divisao por zero

5Do conteúdo para a prática

6Prática sugerida