Rutas
/
Cairo
Cairo
/
Ejercicios
/
Rojo contra Azul: al estilo Darwin
Rojo contra Azul: al estilo Darwin

Rojo contra Azul: al estilo Darwin

Ejercicio de aprendizaje

Introducción

Módulos

Los módulos son una forma de agrupar código relacionado, de evitar conflictos de nombres y, por lo general, están presentes en todas las bases de código salvo en las más triviales.

La sintaxis es la siguiente:

mod my_module {
    pub struct MyStruct {}

    pub struct OtherClass {}
}

Fuera del scope del módulo, los tipos que están dentro de módulos se referencian anteponiendo al nombre del tipo la sintaxis de doble dos puntos ::. Como alternativa, y más habitualmente, puedes colocar una directiva use al principio del archivo (o dentro de un módulo), y entonces los tipos se pueden usar sin el prefijo. Dentro de un mismo módulo no es necesario cualificar los nombres de los 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 {};
        }
    }
}

Puedes crear un alias de un módulo o de un tipo con la sintaxis use core::array::ArrayTrait as Arr; y después usar el alias en cualquier lugar en el que se pudiera usar el módulo o el tipo.

Instrucciones

La dirección está empezando a aplicar principios darwinistas a un proyecto de coche teledirigido. Los desarrolladores se han dividido en dos equipos, Red y Blue, y tienen la tarea de mejorar el diseño de forma independiente el uno del otro. No necesitan preocuparse por las decisiones de diseño del otro equipo. Se te ha pedido que eches un vistazo al código y veas cuál es la mejor manera de combinar ambos esfuerzos con fines de prueba.

1. Encuentra una forma más adecuada de aislar el código de los dos equipos

Usa módulos para expresar mejor la intención del código.

Actualmente, tipos importantes como Motor y Telemetry, por no hablar del propio RemoteControlCar, llevan como prefijo el color del equipo correspondiente: <Color>RemoteControlCarTeam. El único propósito del prefijo es permitir que tipos con el mismo nombre coexistan en el programa. Eso se expresa mejor usando un módulo. Verás que, para estos fines, un módulo tiene ventajas frente a poner prefijos a los tipos.

2. Simplifica el sistema de nombres

La dirección exige que los equipos se llamen «Red Remote Control Car Team» y «Blue Remote Control Car Team» en las definiciones, y que estos nombres largos se usen incluso en el propio código. Sin embargo, los nombres resultan bastante engorrosos a la hora de referirse a los equipos.

Encuentra la forma de usar los identificadores más cortos «Red» y «Blue» dentro del módulo en el que vas a construir los coches.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Cairo Exercism

¿Listo para empezar Rojo contra Azul: al estilo Darwin?

Regístrate en Exercism para aprender y dominar Cairo con 25 conceptos68 ejercicios y mentoría humana real, todo gratis.