Trilhas
/
Cairo
Cairo
/
Exercícios
/
Vermelho vs. Azul: estilo Darwin
Vermelho vs. Azul: estilo Darwin

Vermelho vs. Azul: estilo Darwin

Exercício de aprendizagem

Introdução

Módulos

Os módulos são uma forma de agrupar código relacionado e evitar conflitos de nomes, e em geral estão 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 escopo do módulo, os tipos definidos em módulos são referenciados colocando a sintaxe de dois pontos duplos :: antes do nome do tipo. Como alternativa, e mais comumente, você pode colocar uma diretiva use no topo do arquivo (ou dentro de um módulo) e então os tipos podem ser usados sem o prefixo. Dentro do mesmo módulo, não é preciso 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 {};
        }
    }
}

Você pode 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 poderiam ser usados.

Instruções

A gerência começou a aplicar princípios darwinianos a um projeto de Carrinho de Controle Remoto. Os desenvolvedores foram divididos em dois times, Red e Blue, e a tarefa deles é melhorar o projeto de forma independente um do outro. Eles não precisam se preocupar com as decisões de projeto do outro time. Pedimos que você dê uma olhada no código e veja como pode combinar melhor os dois esforços para fins de teste.

1. Encontre uma forma mais adequada de isolar o código dos dois times

Use módulos para expressar melhor a intenção do código.

No momento, tipos importantes como Motor e Telemetry, sem falar no próprio RemoteControlCar, são prefixados com a cor do time correspondente, <Color>RemoteControlCarTeam. O único propósito do prefixo é permitir que tipos com o mesmo nome coexistam no programa. Um módulo expressa isso melhor. Você vai ver que, para esses propósitos, um módulo tem vantagens em relação a prefixar tipos.

2. Simplifique o sistema de nomes

A gerência exige que os times sejam chamados de "Red Remote Control Car Team" e "Blue Remote Control Car Team" nas definições, e que esses nomes longos sejam usados até no próprio código. No entanto, os nomes são bem incômodos na hora de referenciar os times.

Encontre uma forma de usar os identificadores mais curtos "Red" e "Blue" dentro do módulo em que você vai construir os carros.

Editar via GitHub O link abre em uma nova janela ou aba
Cairo Exercism

Tudo pronto para começar Vermelho vs. Azul: estilo Darwin?

Crie sua conta no Exercism para aprender e dominar Cairo com 25 conceitos68 exercícios e mentoria humana de verdade, tudo de graça.