Mobile App Development · Dart/Flutter

09 · When

Dart não tem a palavra-chave when de outras linguagens — aqui você vai representar essa ideia com switch: o switch statement tradicional e o switch expression do Dart 3.

1Objetivo da aula

Nesta aula você vai entender como representar a ideia de when — presente em linguagens como Kotlin — usando os recursos do Dart: o switch tradicional (statement) e o switch expression introduzido no Dart 3, que permite comparar por igualdade, por faixas de valor e até por tipo.

2O que vamos aprender

switch statement

Compara um valor contra vários case; cada bloco executa uma ação (não retorna um valor diretamente).

case / break

case testa igualdade exata; break evita que a execução caia (fall-through) no próximo case.

default

Bloco executado quando nenhum case corresponde ao valor testado.

switch expression

Recurso do Dart 3: cada "arm" (padrão => valor) retorna diretamente um valor, sem precisar de break.

_ (wildcard)

Padrão coringa: casa com qualquer valor não coberto pelos padrões anteriores — o equivalente ao default.

Guards com < / >=

Dentro de um switch expression, você pode usar operadores relacionais como padrão de cada arm, criando faixas de valores.

Type pattern

int _ => ... casa com qualquer valor do tipo int, permitindo decidir com base no tipo de uma variável Object.

when não existe em Dart

Kotlin tem when; Dart não. O switch (statement ou expression) é o equivalente na linguagem.

3Exemplo comentado

// Exemplo: switch tradicional (statement) e switch expression (Dart 3) para representar a ideia de "when".
void main() {
  final dia = 3;
  String mensagem;

  // Switch tradicional: cada 'case' compara por igualdade; 'break' evita fall-through.
  switch (dia) {
    case 1:
      mensagem = 'Segunda-feira';
      break;
    case 2:
      mensagem = 'Terça-feira';
      break;
    case 3:
      mensagem = 'Quarta-feira';
      break;
    default:
      mensagem = 'Dia inválido';
  }

  print(mensagem);

  final temperatura = 18;

  // Switch expression (Dart 3+): cada arm retorna um valor; não precisa de 'break'.
  final clima = switch (temperatura) {
    < 10 => 'Frio',
    <= 25 => 'Agradável',
    _ => 'Quente',
  };

  print('Clima: $clima');
}

4Saída esperada

Quarta-feira
Clima: Agradável

5Do conteúdo para a prática

6Prática sugerida