Mobile App Development · Dart/Flutter
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
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
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