Fácil Rust

Criando e usando um módulo simples

Enunciado

Crie um módulo matematica com uma função pública soma que recebe dois inteiros e retorna a soma. No main, chame matematica::soma(2, 3) e imprima o resultado.

Requisitos

  • O módulo matematica deve ser declarado com mod.
  • A função soma deve ser pública (pub).
  • O main deve chamar a função e imprimir o valor.

Código inicial

// src/main.rs
mod matematica {
    // TODO: defina a função soma
}

fn main() {
    // TODO: chame matematica::soma(2, 3) e imprima
}

Saída esperada

5
Ver dica

Dentro do módulo, use pub fn soma(a: i32, b: i32) -> i32 { a + b }.

Mostrar solução
// src/main.rs
mod matematica {
    // Função pública para ser acessível fora do módulo
    pub fn soma(a: i32, b: i32) -> i32 {
        a + b
    }
}

fn main() {
    // Chamada usando o caminho completo do módulo
    let resultado = matematica::soma(2, 3);
    println!("{}", resultado);
}

Passo a passo

  1. mod matematica { ... } declara um módulo embutido no próprio arquivo main.rs.
  2. Dentro do módulo, pub fn soma define uma função visível fora do módulo. Sem pub, ela seria privada.
  3. No main, usamos o caminho matematica::soma para acessar a função, pois ela está no módulo matematica.
  4. Passamos os argumentos 2 e 3 e armazenamos o retorno em resultado.
  5. println! imprime o valor seguido de nova linha.

Por que funciona

Módulos criam namespaces. A função soma pertence ao módulo matematica, então seu caminho é matematica::soma. O pub remove a privacidade padrão, permitindo que o código fora do módulo a chame. O main está na raiz do crate, então pode acessar módulos declarados ali.

Erros comuns

  • Esquecer pub na função: fn soma(...) dentro do módulo. O compilador acusa: function soma is private.
  • Tentar chamar soma(2, 3) diretamente no main sem o caminho: cannot find function soma in this scope.
  • Declarar o módulo depois do main? Não há problema, a ordem de declaração não importa em Rust.

Outra forma de resolver

Usar use para encurtar o caminho:

mod matematica {
    pub fn soma(a: i32, b: i32) -> i32 { a + b }
}

use matematica::soma;

fn main() {
    println!("{}", soma(2, 3));
}

Isso é preferível quando a função é usada muitas vezes.

Saída esperada

5