Mobile App Development · Dart/Flutter

05 · Operadores — Desafios

Dois cenários de controle de fluxo que usam operadores relacionais e lógicos como base: classificar pedidos e montar um relatório semanal de estudos.

Desafio 1

desafio_01_classificador_pedidos.dart

Classifica um pedido por faixa de valor com if/else if/else (que dependem de operadores relacionais), decide a mensagem de cupom com o operador ternário e mapeia o status com switch.

// Desafio: classificar pedidos usando if/else, operador ternário e switch.
// Combina múltiplas estruturas de controle de fluxo em um contexto real.
void main() {
  String cliente = 'Mariana';
  double valorPedido = 165.90;
  // bool que indica se um cupom foi aplicado ao pedido.
  bool temCupom = true;
  String status = 'preparando';

  // Cabeçalho do classificador.
  print('=== Classificador de Pedidos ===');
  print('Cliente: $cliente');
  print('Valor: R\$ ${valorPedido.toStringAsFixed(2)}');

  // Classifica o pedido por faixa de valor usando if/else if/else.
  if (valorPedido < 50) {
    print('Categoria: pedido pequeno');
  } else if (valorPedido < 150) {
    print('Categoria: pedido medio');
  } else {
    // Pedidos acima de R$ 150 são considerados grandes.
    print('Categoria: pedido grande');
  }

  // Operador ternário: condição ? valor_se_verdadeiro : valor_se_falso.
  // Forma compacta de um if/else que retorna um valor.
  print(temCupom ? 'Cupom aplicado' : 'Sem cupom aplicado');

  // Switch para mapear o status do pedido a uma mensagem descritiva.
  switch (status) {
    case 'novo':
      print('Status: pedido recebido');
      break;
    case 'preparando':
      print('Status: pedido em preparo');
      break;
    case 'enviado':
      print('Status: pedido saiu para entrega');
      break;
    case 'entregue':
      print('Status: pedido entregue');
      break;
    default:
      // Captura qualquer status não mapeado nos cases anteriores.
      print('Status: desconhecido');
  }
}

Saída esperada

=== Classificador de Pedidos ===
Cliente: Mariana
Valor: R$ 165.90
Categoria: pedido grande
Cupom aplicado
Status: pedido em preparo

Como executar

dart run 05-Operadores/03_Desafios/codigo_fonte/desafio_01_classificador_pedidos.dart

Desafio 2

desafio_02_relatorio_estudos.dart

Percorre 7 dias com for, usa continue para pular o dia de descanso e uma comparação relacional dentro de um if para decidir quando usar break assim que a meta semanal é atingida.

// Desafio: gerar um relatório de estudos usando for, continue e break.
// Simula uma semana de estudos com um dia de descanso e uma meta semanal de horas.
void main() {
  // Acumulador de horas estudadas ao longo da semana.
  int totalHoras = 0;
  // Horas dedicadas ao estudo em cada dia de estudo.
  int horasPorDia = 2;
  // Número do dia da semana reservado para descanso (sem estudos).
  int diaDescanso = 3;
  // Meta de horas semanais: quando atingida, o laço é interrompido.
  int metaSemanal = 6;

  print('=== Relatorio de Estudos ===');

  // Laço que percorre os 7 dias da semana (1 a 7).
  for (int dia = 1; dia <= 7; dia++) {
    // Se for o dia de descanso, pula a iteração com 'continue'.
    if (dia == diaDescanso) {
      print('Dia $dia: descanso');
      continue; // Vai direto para o próximo dia sem contabilizar horas.
    }

    // Acumula as horas do dia atual ao total semanal.
    totalHoras += horasPorDia;
    print('Dia $dia: $horasPorDia horas estudadas');

    // Verifica se a meta semanal foi atingida e encerra o laço com 'break'.
    if (totalHoras >= metaSemanal) {
      print('Meta semanal atingida');
      break; // Interrompe o laço mesmo que ainda haja dias restantes.
    }
  }

  // Exibe o total de horas estudadas ao final do relatório.
  print('Total: $totalHoras horas');
}

Saída esperada

=== Relatorio de Estudos ===
Dia 1: 2 horas estudadas
Dia 2: 2 horas estudadas
Dia 3: descanso
Dia 4: 2 horas estudadas
Meta semanal atingida
Total: 6 horas

Como executar

dart run 05-Operadores/03_Desafios/codigo_fonte/desafio_02_relatorio_estudos.dart