Tracks
/
Cairo
Cairo
/
Übungen
/
Rot gegen Blau: im Darwin-Stil
Rot gegen Blau: im Darwin-Stil

Rot gegen Blau: im Darwin-Stil

Lernübung

Einführung

Module

Mit Modulen gruppierst du zusammengehörigen Code und vermeidest Namenskonflikte. In allen außer den denkbar einfachsten Codebasen sind sie normalerweise vorhanden.

Die Syntax sieht so aus:

mod my_module {
    pub struct MyStruct {}

    pub struct OtherClass {}
}

Außerhalb des Gültigkeitsbereichs eines Moduls sprichst du Typen, die in Modulen liegen, an, indem du dem Typnamen die Doppelpunkt-Doppelpunkt-Syntax :: voranstellst. Alternativ und üblicher kannst du eine use-Anweisung an den Anfang der Datei (oder in ein Modul) setzen. Danach lassen sich die Typen ohne das Präfix verwenden. Innerhalb desselben Moduls musst du Typnamen nicht qualifizieren.

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 {};
        }
    }
}

Du kannst einem Modul oder einem Typ mit der Syntax use core::array::ArrayTrait as Arr; einen Alias geben. Diesen Alias verwendest du dann überall dort, wo das Modul oder der Typ verwendet werden kann.

Anleitung

Das Management beginnt, darwinistische Prinzipien auf ein Projekt für ferngesteuerte Autos anzuwenden. Die Entwickler wurden in zwei Teams aufgeteilt, Red und Blue, und sollen das Design unabhängig voneinander verbessern. Sie müssen sich nicht mit den Designentscheidungen des jeweils anderen Teams befassen. Man hat dich gebeten, dir den Code anzusehen und zu überlegen, wie du die Arbeit der beiden Teams für Testzwecke am besten zusammenführen kannst.

1. Finde einen passenderen Weg, den Code der beiden Teams zu isolieren

Bitte verwende Module, um die Absicht des Codes besser auszudrücken.

Aktuell werden wichtige Typen wie Motor und Telemetry, ganz zu schweigen von RemoteControlCar selbst, mit der Farbe des jeweiligen Teams als Präfix versehen: <Color>RemoteControlCarTeam. Der einzige Zweck des Präfixes ist es, Typen mit demselben Namen im Programm nebeneinander existieren zu lassen. Das lässt sich besser mit einem Modul ausdrücken. Du wirst sehen, dass ein Modul für diese Zwecke Vorteile gegenüber dem Präfixieren von Typen hat.

2. Vereinfache das Benennungssystem

Das Management verlangt, dass die Teams in den Definitionen „Red Remote Control Car Team“ und „Blue Remote Control Car Team“ heißen und dass diese langen Namen sogar im Code selbst verwendet werden. Allerdings sind die Namen ziemlich umständlich, wenn du auf die Teams verweist.

Finde einen Weg, die kürzeren Bezeichner „Red“ und „Blue“ in dem Modul zu verwenden, in dem du die Autos bauen wirst.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Cairo Exercism

Bereit, mit Rot gegen Blau: im Darwin-Stil zu starten?

Melde dich bei Exercism an, um Cairo mit 25 Konzepte68 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.