Da trilha de Rust Este conceito ainda não saiu como card do dia. ir para o card de hoje

Rust Controle de fluxo Básico

Controle de fluxo

Em Rust, o controle de fluxo é uma expressão, não apenas um comando. Isso significa que if, match, loop e blocos podem retornar valores. Por exemplo, let x = if cond { 1 } else { 2 }; é perfeitamente válido. Essa característica torna o código mais conciso e expressivo.

Rust oferece três construções principais de repetição: loop (infinito), while (condicional) e for (iteração sobre coleções). O loop é especial porque pode ser interrompido com break seguido de um valor, permitindo que o loop produza um resultado. Já while e for não retornam valor diretamente.

Para loops aninhados, Rust permite labels (rótulos) para especificar qual loop deve ser interrompido ou continuado. A sintaxe é 'label: loop { ... break 'label; }. Isso evita o uso de flags booleanas complicadas.

Neste card, você vai praticar esses conceitos com exemplos práticos e exercícios que exploram desde o básico até situações que exigem labels e break com valor.

Pontos-chave

  • if é uma expressão e pode ser usado para inicializar variáveis, desde que todos os braços retornem o mesmo tipo.
  • loop é um laço infinito que pode ser quebrado com break valor para produzir um resultado.
  • while repete enquanto uma condição for verdadeira; for itera sobre um iterador (ex.: 0..5).
  • Labels ('nome:) permitem controlar loops aninhados, especificando qual break ou continue executar.
  • O break com valor só é permitido em loop, não em while ou for.
controle_fluxo.rs
fn main() {
    // if como expressão
    let idade = 20;
    let categoria = if idade >= 18 { "adulto" } else { "menor" };
    println!("Categoria: {}", categoria);

    // loop com break retornando valor
    let mut contador = 0;
    let resultado = loop {
        contador += 1;
        if contador == 5 {
            break contador * 2; // retorna 10
        }
    };
    println!("Resultado do loop: {}", resultado);

    // while
    let mut n = 3;
    while n > 0 {
        println!("while: {}", n);
        n -= 1;
    }

    // for
    for i in 0..3 {
        println!("for: {}", i);
    }

    // labels em loops aninhados
    'externo: for i in 0..3 {
        for j in 0..3 {
            if i == 1 && j == 1 {
                println!("Break no loop externo em i={}, j={}", i, j);
                break 'externo;
            }
            println!("i={}, j={}", i, j);
        }
    }
}

Exercícios

  1. 1
    Fácil

    Classificação com if como expressão

    Escreva um programa que leia um número inteiro (pode ser fixo no código) e use if como expressão para classificar o número como "positivo", "negativo" ou "zero". Imprima a classificação.

    Resolver
  2. 2
    Médio

    Soma com loop e break

    Use um loop infinito para somar números inteiros começando em 1. O loop deve parar quando a soma ultrapassar 50, e então imprimir a soma final e o último número somado.

    Resolver
  3. 3
    Desafio

    Busca em matriz com labels

    Dada uma matriz 3x3 de inteiros, encontre a posição (linha, coluna) do primeiro número negativo. Use loops aninhados com labels para interromper ambos os loops assim que encontrar. Se não houver negativo, imprima uma mensagem adequada.

    Resolver

Continue estudando