💻 Exemplos: Capítulo 03: Controle de Fluxo: if/else, loop, while e for
💻 Exemplos: Capítulo 03: Estruturas de Controle e Laços de Repetição
Especialização em Sistemas com Rust • Demonstrações Práticas Compiláveis
🎯 Objetivo dos Exemplos
Demonstrar que estruturas de controle em Rust são expressões avaliadas que produzem valores, utilização do loop com retorno de valor via break valor, laços rotulados (labeled loops) e laços for idiomáticos com ranges e coleções.
1. Código Fonte Completo (src/main.rs)
//! Demonstração de Estruturas de Decisão e Loops Idiomáticos em Rust
fn main() {
println!("=== CONTROLE DE FLUXO DETERMINÍSTICO ===");
// 1. if/else como Expressão (Ternário Nativo do Rust)
let carga_cpu = 78.5;
let nivel_alerta = if carga_cpu > 85.0 {
"CRÍTICO"
} else if carga_cpu > 70.0 {
"ALERTA"
} else {
"NORMAL"
};
println!("Status da CPU ({:.1}%): [{}]", carga_cpu, nivel_alerta);
// 2. Loop Infinito com Retorno de Valor pelo break
let mut tentativas = 0;
let token_acesso = loop {
tentativas += 1;
if tentativas == 3 {
// break com valor produz o resultado da expressão loop
break format!("AUTH_TOKEN_0x{:04X}", tentativas * 4096);
}
};
println!("Token gerado após {} tentativas: {}", tentativas, token_acesso);
// 3. Laços Rotulados (Loop Labels) para quebra de múltiplos níveis
let mut matriz_varrida = 0;
'varredura_externa: for x in 0..4 {
for y in 0..4 {
matriz_varrida += 1;
if x == 2 && y == 1 {
println!("Condição de parada encontrada nas coordenadas ({}, {}). Encerrando laço externo!", x, y);
break 'varredura_externa; // Interrompe o loop externo identificado pelo rótulo
}
}
}
println!("Total de iterações executadas antes da quebra: {}", matriz_varrida);
// 4. Laço While Condicional
let mut pressao_bar = 5;
println!("\nDespressurizando câmara:");
while pressao_bar > 0 {
print!("{} bar... ", pressao_bar);
pressao_bar -= 1;
}
println!("Vácuo estabelecido!");
// 5. Laço For Idiomático com Ranges e Iteradores Reversos
println!("\nContagem regressiva de ignição com range reverso:");
for segundo in (1..=3).rev() {
println!("T-minus {}s", segundo);
}
println!("🚀 Decolagem!");
// 6. Iteração segura sobre elementos de coleção
let sensores = ["TEMP_01", "PRESS_02", "FLOW_03"];
println!("\nLeitura de sensores com índice e valor:");
for (indice, sensor) in sensores.iter().enumerate() {
println!("Canal [{}] -> Sensor ativo: {}", indice, sensor);
}
}
2. Saída Esperada no Terminal
=== CONTROLE DE FLUXO DETERMINÍSTICO ===
Status da CPU (78.5%): [ALERTA]
Token gerado após 3 tentativas: AUTH_TOKEN_0x3000
Condição de parada encontrada nas coordenadas (2, 1). Encerrando laço externo!
Total de iterações executadas antes da quebra: 10
Despressurizando câmara:
5 bar... 4 bar... 3 bar... 2 bar... 1 bar... Vácuo estabelecido!
Contagem regressiva de ignição com range reverso:
T-minus 3s
T-minus 2s
T-minus 1s
🚀 Decolagem!
Leitura de sensores com índice e valor:
Canal [0] -> Sensor ativo: TEMP_01
Canal [1] -> Sensor ativo: PRESS_02
Canal [2] -> Sensor ativo: FLOW_03