Pular para conteúdo

Aula 03 - Controle de Fluxo 🔄

Objetivo

Objetivo: Aprender a direcionar o caminho que o seu programa segue usando estruturas condicionais e de repetição, com foco especial no poder do match.


1. Condicionais: if / else 🚦

Diferente de C ou Java, o if no Rust é uma expressão, o que significa que ele pode retornar um valor.

fn main() {
    let numero = 7;

    if numero < 5 {
        println!("Condição verdadeira");
    } else {
        println!("Condição falsa");
    }

    // Usando if em uma atribuição (Expressão)
    let condicao = true;
    let resultado = if condicao { 5 } else { 6 };
    println!("O resultado é: {}", resultado);
}

2. O Poder do match 🎯

O match é como um switch "bombado". Ele é exaustivo: o compilador garante que você tratou todos os casos possíveis.

fn main() {
    let numero = 3;

    match numero {
        1 => println!("Um"),
        2 | 3 => println!("Dois ou Três"),
        4..=10 => println!("Entre quatro e dez"),
        _ => println!("Qualquer outra coisa"), // Default (padrão)
    }
}

Visualização: Como o Match funciona

graph TD
    A["Valor Entrada"] --> B{Qual Padrão?}
    B -->|Padrão 1| C["Executa Código 1"]
    B -->|Padrão 2| D["Executa Código 2"]
    B -->|Padrão _| E["Caso Padrão (Catch-all)"]
    style B fill:#f9f,stroke:#333,stroke-width:2px

3. Estruturas de Repetição (Loops) 🔁

Rust possui três tipos de loops: loop, while e for.

loop (Loop Infinito)

Útil para repetir até que um break seja encontrado. Pode retornar um valor!

let mut contador = 0;
let resultado = loop {
    contador += 1;
    if contador == 10 {
        break contador * 2;
    }
};

while (Loop Condicional)

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

for (Loop em Coleções ✨)

O mais utilizado por ser mais seguro e eficiente.

let a = [10, 20, 30, 40, 50];
for elemento in a {
    println!("O valor é: {}", elemento);
}

// Usando Ranges
for numero in (1..4).rev() {
    println!("{}...", numero);
}


4. Mini-Projeto: Jogo de Adivinhação (Base) 🎲

Vamos aplicar o que aprendemos para criar o núcleo de um jogo: 1. Gere um número "secreto" (fixo por enquanto). 2. Peça ao usuário uma entrada (simulada ou via stdin). 3. Use um loop para permitir várias tentativas. 4. Use um match para comparar o palpite com o número secreto (Menor, Maior ou Igual). 5. Use break para sair do loop quando ganhar.


5. Exercício de Fixação 🧠

Dica

Sempre prefira o for ao while quando estiver iterando sobre coleções para evitar erros de índice.

  1. Por que dizemos que o if é uma expressão no Rust?
  2. O que acontece se você esquecer de tratar um caso no match?
  3. Como você faria um loop que conta de 1 a 100 (inclusive)?

Próxima Aula: Vamos organizar nosso código com Funções e Módulos! 📦