Capítulo 08: Funções (Modularização) 🪓❄️

Neste capítulo, vamos aprender a dividir nosso código em blocos menores e reutilizáveis chamados Funções no Rust, com o tema God of War!


📖 O que são Funções?

Funções são blocos de código que realizam uma tarefa específica. Em Rust, usamos a palavra-chave fn e a seta -> para indicar o tipo de retorno.


📖 Exemplo Guiado: Ataque do Kratos

Vamos criar uma função que calcula o dano de um ataque baseado na força base e em um bônus.

  1. Crie o arquivo ataque_kratos.rs na pasta src/:
// Diferente do C++, a ordem das funções não importa no Rust!
fn calcular_dano(forca: i32, bonus: i32) -> i32 {
    // No Rust, a última linha sem ponto e vírgula é o retorno!
    forca + bonus 
}
 
fn main() {
    let forca_base = 50;
    let bonus_furia = 25;
 
    // Chamando a função
    let dano = calcular_dano(forca_base, bonus_furia);
 
    println!("Kratos atacou com as Laminas do Caos!");
    println!("Dano causado: {}", dano);
}

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Compile: rustc ataque_kratos.rs
  3. Execute: ./ataque_kratos

Resultado Esperado:

Kratos atacou com as Laminas do Caos!
Dano causado: 75

📊 Ilustração Visual: Fluxo da Função

Veja como o controle do programa passa para a função e retorna:

graph TD
    A[main] -->|"1. Chama calcular_dano"| B["Função: calcular_dano"]
    B -->|"2. Executa a soma"| B
    B -->|"3. Retorna o resultado"| A

🛠️ Prática Obrigatória 1: Barra de Vida

Crie uma função chamada exibir_vida(vida: i32) que não retorna nada e apenas exibe uma barra visual de vida usando colchetes (ex: se a vida for 100, exibe [||||||||||]). Use um laço dentro da função para desenhar a barra!


🔑 Gabarito de Código

Prática 1: barra_vida.rs

fn exibir_vida(vida: i32) {
    print!("Vida: [");
    let barras = vida / 10;
    for _ in 0..barras {
        print!("|");
    }
    println!("] {}%", vida);
}
 
fn main() {
    let vida_kratos = 80;
    exibir_vida(vida_kratos);
}

Capitulo Anterior | Proximo Capitulo