Mobile App Development · Dart/Flutter

09 · When — Exercícios

Quatro exercícios com switch statement, switch expression com faixas de valor e verificação de tipo.

Exercício 1

01_Ex_When_AvaliacaoNotas.dart

Classifica uma nota numérica (0-100) em um conceito de A a F usando switch expression, com cada arm testando uma faixa de valores combinando >=, <= e &&.

// Exercício: classificar uma nota numérica em conceito (A-F) usando switch expression.
// O switch expression (Dart 3+) é uma forma compacta de mapear um valor a um resultado.
void main() {
  // Nota a ser avaliada (0-100).
  final int nota = 85;

  // Switch expression: avalia a nota contra intervalos com && e retorna o conceito.
  // _ é o caso padrão (wildcard), executado se nenhum padrão anterior corresponder.
  final String conceito = switch (nota) {
    >= 0 && <= 49 => 'F',
    >= 50 && <= 59 => 'D',
    >= 60 && <= 69 => 'C',
    >= 70 && <= 79 => 'B',
    >= 80 && <= 100 => 'A',
    _ => 'Nota invalida',
  };

  print('Conceito: $conceito');
}

Saída esperada

Conceito: A

Como executar

dart run 09-When/02_Exercicios/codigo_fonte/01_Ex_When_AvaliacaoNotas.dart

Exercício 2

02_Ex_When_Traducao_das_cores.dart

Traduz o nome de uma cor do português para o inglês usando switch statement tradicional, comparando por igualdade exata em cada case.

// Exercício: traduzir o nome de uma cor do português para o inglês usando switch/case.
// O switch testa a igualdade exata com cada 'case' e executa o bloco correspondente.
void main() {
  // Cor em português que será traduzida.
  String cor = 'vermelho';

  // Variável que receberá a tradução após o switch.
  String traducao;

  // Compara 'cor' com cada case; 'break' impede a execução cair no próximo case.
  switch (cor) {
    case 'vermelho':
      traducao = 'red';
      break;
    case 'azul':
      traducao = 'blue';
      break;
    case 'verde':
      traducao = 'green';
      break;
    default:
      // Captura qualquer cor não mapeada nos cases anteriores.
      traducao = 'Cor desconhecida';
  }

  print('Tradução: $traducao');
}

Saída esperada

Tradução: red

Como executar

dart run 09-When/02_Exercicios/codigo_fonte/02_Ex_When_Traducao_das_cores.dart

Exercício 3

03_Ex_When_Classificacao_de_numeros.dart

Embora o nome sugira switch, este exercício classifica o sinal de um número (positivo, negativo ou zero) usando uma cadeia if / else if / else — útil para comparar essa abordagem com as versões por switch dos outros exercícios desta página.

// Exercício: classificar um número como positivo, negativo ou zero usando if/else if.
// Demonstra a estrutura condicional encadeada para cobrir todos os casos possíveis.
void main() {
  // Número a ser classificado.
  int numero = 7;

  // Variável que receberá a classificação após o bloco condicional.
  String classificacao;

  // Verifica as três faixas: positivo, negativo ou exatamente zero.
  if (numero > 0) {
    classificacao = 'Positivo';
  } else if (numero < 0) {
    classificacao = 'Negativo';
  } else {
    // Só chega aqui se numero == 0.
    classificacao = 'Zero';
  }

  print('Classificação: $classificacao');
}

Saída esperada

Classificação: Positivo

Como executar

dart run 09-When/02_Exercicios/codigo_fonte/03_Ex_When_Classificacao_de_numeros.dart

Exercício 4

04_Ex_When_Verificacao_de_Tipo.dart

Identifica o tipo de um valor Object em tempo de execução usando type patterns do Dart 3 dentro de um switch expression — cada arm como int _ casa com qualquer valor daquele tipo.

// Exercício: verificar o tipo de uma variável em tempo de execução com switch expression.
// Usa pattern matching de tipo (Dart 3+): 'int _' casa com qualquer valor do tipo int.
void main() {
  // Variável cujo tipo será identificado dinamicamente.
  const Object valor = 42;

  // Cada arm usa um type pattern para verificar o tipo do valor.
  // _ (wildcard) ignora o próprio valor e verifica apenas o tipo.
  final String tipo = switch (valor) {
    int _ => 'Inteiro',
    String _ => 'Texto',
    bool _ => 'Booleano',
    _ => 'Tipo desconhecido',
  };

  print('Tipo: $tipo');
}

Saída esperada

Tipo: Inteiro

Como executar

dart run 09-When/02_Exercicios/codigo_fonte/04_Ex_When_Verificacao_de_Tipo.dart