Até agora, todos os exemplos neste capítulo definiram vários módulos em um arquivo. Quando os módulos ficam grandes, você pode querer mover suas definições para um arquivo separado para tornar o código mais fácil de navegar.
Por exemplo, vamos começar com o código da Listagem 7-17 e mover o módulo frente_da_casa
para seu próprio arquivo src/frente_da_casa.rs alterando o arquivo raiz do crate para que contenha o código mostrado na Listagem 7-21. Neste caso, o arquivo raiz do crate é src/lib.rs, mas este procedimento também funciona com crates binários cujo crate raiz do arquivo é src/main.rs.
Nome do arquivo: src/lib.rs
mod frente_da_casa;
pub use crate::frente_da_casa::hospedagem;
pub fn comer_no_restaurante() {
hospedagem::adicionar_a_lista_de_espera();
hospedagem::adicionar_a_lista_de_espera();
hospedagem::adicionar_a_lista_de_espera();
}
E src/frente_da_casa.rs obtém as definições do corpo do módulo frente_da_casa
, conforme mostrado na Listagem 7-22.
Nome do arquivo: src/frente_da_casa.rs
pub mod hospedagem {
pub fn adicionar_a_lista_de_espera() {}
}
Usar um ponto-e-vírgula depois de mod frente_da_casa
em vez de usar um bloco informa ao Rust para carregar o conteúdo do módulo de outro arquivo com o mesmo nome do módulo. Para continuar com nosso exemplo e extrair o módulo hospedagem
para seu próprio arquivo também, alteramos src/frente_da_casa.rs para conter apenas a declaração do módulo hospedagem
:
Nome do arquivo: src/frente_da_casa.rs
pub mod hospedagem;
Em seguida, criamos um diretório src/frente_da_casa e um arquivo src/frente_da_casa/hospedagem.rs para conter as definições feitas no módulo hospedagem
:
Nome do arquivo: src/frente_da_casa/hospedagem.rs
A árvore de módulos permanece a mesma e as chamadas da função comer_no_restaurante
funcionarão sem nenhuma modificação, embora as definições estejam em arquivos diferentes. Essa técnica permite mover módulos para novos arquivos à medida que aumentam de tamanho.
Observe que a declaração pub use crate::frente_da_casa::hospedagem
em src/lib.rs também não mudou, nem use
tem qualquer impacto sobre quais arquivos são compilados como parte do crate. A palavra-chave mod
declara módulos e Rust procura em um arquivo com o mesmo nome do módulo o código que entra naquele módulo.
Resumo
Rust permite dividir um pacote em vários crates e um crate em módulos para que você possa consultar os itens definidos em um módulo de outro módulo. Você pode fazer isso especificando caminhos absolutos ou relativos. Esses caminhos podem ser trazidos para o escopo com uma declaração use
para que você possa usar um caminho mais curto para vários usos do item nesse escopo. O código do módulo é privado por padrão, mas você pode tornar as definições públicas adicionando a palavra-chave pub
.
No próximo capítulo, veremos algumas estruturas de dados de coleção na biblioteca padrão que você pode usar em seu código bem organizado.
Traduzido por Acervo Lima. O original pode ser acessado aqui.
0 comentários:
Postar um comentário