Os módulos são uma forma de agrupar código relacionado, para evitar conflitos de nomes, e estão geralmente presentes em praticamente todos os projetos de código, exceto nos mais triviais.
A sintaxe é a seguinte:
mod my_module {
pub struct MyStruct {}
pub struct OtherClass {}
}
Fora do âmbito do módulo, os tipos incluídos em módulos são referidos prefixando o nome do tipo com a sintaxe de dois pontos duplos ::.
Em alternativa, e mais habitualmente, podes colocar uma diretiva use no topo do ficheiro (ou dentro de um módulo) e depois os tipos podem ser usados sem o prefixo.
Dentro do mesmo módulo não é necessário qualificar os nomes dos tipos.
mod my_module {
#[derive(Drop)]
pub struct MyStruct {}
pub struct Foo {}
#[generate_trait]
pub impl FooImpl of FooTrait {
fn bar() {
let baz = MyStruct {};
}
}
}
#[derive(Drop)]
pub struct Qux {}
#[generate_trait]
impl QuxImpl of QuxTrait {
fn box() {
let nux = my_module::MyStruct {};
}
}
mod other_module {
use super::my_module::*;
#[derive(Drop)]
pub struct Tix {}
#[generate_trait]
pub impl TixImpl of TixTrait {
fn jeg() {
let lor = MyStruct {};
}
}
}
Podes criar um alias para um módulo ou um tipo com a sintaxe use core::array::ArrayTrait as Arr; e depois usar o alias em qualquer lugar onde o módulo ou o tipo possam ser usados.
A direção está a começar a aplicar princípios darwinianos a um projeto de carro telecomandado. Os programadores foram divididos em duas equipas, Red e Blue, e têm como tarefa melhorar o design de forma independente uma da outra. Não precisam de se preocupar com as decisões de design da outra equipa. Pediu-se-te que dês uma vista de olhos ao código e vejas qual a melhor forma de combinar os esforços das duas equipas para efeitos de teste.
Usa módulos para expressar melhor a intenção do código.
Neste momento, tipos importantes como Motor e Telemetry, para não falar do próprio RemoteControlCar, têm como prefixo a cor da equipa correspondente, <Color>RemoteControlCarTeam.
O único propósito do prefixo é permitir que tipos com o mesmo nome coexistam no programa.
Isso expressa-se melhor com um módulo.
Vais ver que, para estes efeitos, um módulo tem vantagens em relação a colocar prefixos nos tipos.
A direção exige que as equipas se chamem "Red Remote Control Car Team" e "Blue Remote Control Car Team" nas definições, e que estes nomes longos sejam usados até no próprio código. No entanto, os nomes são bastante pesados quando se faz referência às equipas.
Encontra uma forma de usar os identificadores mais curtos "Red" e "Blue" dentro do módulo no qual vais construir os carros.
Inscreve-te no Exercism para aprenderes e dominares Cairo com 25 conceitos68 exercícios, e mentoria humana real, tudo grátis.