Mobile App Development · Dart/Flutter
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.
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.
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.
< / >=
Dentro de um switch expression, você pode usar operadores relacionais como padrão de cada arm, criando faixas de valores.
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.
// 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');
}
Quarta-feira Clima: Agradável
switch expression.classificarTurno(int hora) que retorne "Manhã" (6 a 11), "Tarde" (12 a 17), "Noite" (18 a 23) e "Madrugada" para o restante.Object entre int, String e bool.if/else if e com switch expression — qual fica mais legível?