Médio Rust
Organizando em arquivos separados
Enunciado
Crie um crate binário com dois módulos em arquivos separados: saudacoes.rs com uma função pub fn ola(nome: &str) -> String que retorna "Olá, {nome}!", e despedidas.rs com pub fn tchau(nome: &str) -> String que retorna "Tchau, {nome}!". No main.rs, declare os módulos e use as funções para imprimir as mensagens para o nome "Rust".
Requisitos
- Os módulos devem estar em arquivos
src/saudacoes.rsesrc/despedidas.rs. - As funções devem ser públicas e retornar
String. - O
main.rsdeve declararmod saudacoes;emod despedidas;e chamar as funções.
Código inicial
// src/main.rs
// TODO: declarar os módulos e usar as funções
fn main() {
// TODO
}
Saída esperada
Olá, Rust!
Tchau, Rust!
Ver dica
Crie os arquivos src/saudacoes.rs e src/despedidas.rs. Em main.rs, use mod saudacoes; e mod despedidas;.
Mostrar solução
// src/saudacoes.rs
pub fn ola(nome: &str) -> String {
format!("Olá, {}!", nome)
}
// src/despedidas.rs
pub fn tchau(nome: &str) -> String {
format!("Tchau, {}!", nome)
}
// src/main.rs
mod saudacoes; // procura por src/saudacoes.rs
mod despedidas; // procura por src/despedidas.rs
fn main() {
let nome = "Rust";
println!("{}", saudacoes::ola(nome));
println!("{}", despedidas::tchau(nome));
}
Passo a passo
- Criamos o arquivo
src/saudacoes.rscom a funçãoola. Opubpermite que ela seja usada fora do módulo. - Criamos
src/despedidas.rscom a funçãotchau, também pública. - No
main.rs,mod saudacoes;instrui o compilador a carregar o arquivosrc/saudacoes.rscomo um módulo chamadosaudacoes. mod despedidas;faz o mesmo para o outro arquivo.- No
main, chamamossaudacoes::ola(nome)edespedidas::tchau(nome), passando a string"Rust". println!imprime cada mensagem em uma linha separada.
Por que funciona
A convenção de módulos em Rust mapeia o nome do módulo para um arquivo .rs ou um diretório com mod.rs. Ao declarar mod saudacoes; na raiz (main.rs), o compilador busca src/saudacoes.rs. As funções são públicas, então podem ser acessadas via saudacoes::ola. O format! cria uma String formatada.
Erros comuns
- Esquecer
pubna função:fn ola(...)dentro do arquivo. O erro éfunctionolais private. - Nomear o arquivo errado: se criar
src/saudacao.rsmas declararmod saudacoes;, o compilador não encontra o arquivo. - Tentar usar
saudacoes::olasem declararmod saudacoes;nomain.rs:use of undeclared crate or modulesaudacoes``.
Outra forma de resolver
Usar use para importar as funções:
mod saudacoes;
mod despedidas;
use saudacoes::ola;
use despedidas::tchau;
fn main() {
let nome = "Rust";
println!("{}", ola(nome));
println!("{}", tchau(nome));
}
Preferível quando as funções são usadas várias vezes.
Saída esperada
Olá, Rust!
Tchau, Rust!