Pular para conteúdo

Aula 04 - Funções e Organização de Código 📦

Objetivo

Objetivo: Entender como declarar funções, passar parâmetros, retornar valores e como organizar o código em múltiplos arquivos e módulos para manter a manutenabilidade.


1. Funções em Rust 🛠️

No Rust, usamos a palavra-chave fn e a convenção de nomeação é o snake_case.

Anatomia de uma Função

fn main() {
    println!("Início do programa");
    outra_funcao(5, 'h');
}

fn outra_funcao(valor: i32, unidade: char) {
    println!("O valor medido é: {}{}", valor, unidade);
}

2. Parâmetros e Retorno 🔄

Diferente de variáveis locais, você deve declarar o tipo de cada parâmetro em uma função.

Funções com Retorno

O tipo de retorno é declarado após a seta ->.

fn cinco() -> i32 {
    5 // Sem ponto e vírgula = Retorno implícito
}

fn soma(a: i32, b: i32) -> i32 {
    return a + b; // Uso opcional da palavra 'return'
}

3. Expressões vs Instruções 🧪

Rust é uma linguagem baseada em expressões. - Instruções (Statements): Ações que não retornam valor (terminam em ;). - Expressões (Expressions): Avaliam e resultam em um valor (não terminam em ;).

let y = {
    let x = 3;
    x + 1 // Esta é uma expressão que avalia para 4
};

4. Organizando com Módulos 📂

Para projetos maiores, usamos o sistema de módulos (mod) para dividir o código.

Estrutura de Pastas

$ ls -R
src/
├── main.rs   # Ponto de entrada
└── util.rs   # Módulo utilitário

Usando Módulos em main.rs

mod util; // Declara que o módulo util existe

fn main() {
    util::saudacao();
}

Definindo em util.rs

pub fn saudacao() { // 'pub' torna a função pública
    println!("Olá de outro arquivo!");
}

5. Visualização: Hierarquia de Módulos 🏛️

graph TD
    crate["Crate (Raiz)"] --> main["main.rs (Binário)"]
    crate --> lib["lib.rs (Biblioteca)"]
    main --> mod_auth["mod auth"]
    main --> mod_db["mod db"]
    mod_auth --> login["fn login()"]
    mod_db --> query["fn query()"]
    style crate fill:#f96,stroke:#333

6. Mini-Projeto: Calculadora Modular 🧮

Divida seu código em dois arquivos: 1. operacoes.rs: Contenha funções para somar, subtrair, multiplicar e dividir. 2. main.rs: Importe o módulo operacoes e realize uma série de cálculos baseados na entrada do usuário.


7. Exercício de Fixação 🧠

  1. Qual a diferença visual entre uma expressão e uma instrução no Rust?
  2. Para que serve a palavra-chave pub antes de uma função em um módulo?
  3. O que acontece se você declarar uma função que promete retornar um i32 mas não retorna nada?

Próxima Aula: Vamos encarar o conceito mais importante do Rust: Ownership (Parte 1)! 🧠 (Nota: O link correto será aula-05.md)