Треки
/
Cairo
Cairo
/
Вправи
/
Червоні проти синіх: у стилі Дарвіна
Червоні проти синіх: у стилі Дарвіна

Червоні проти синіх: у стилі Дарвіна

Навчальна вправа

Вступ

Модулі

Модулі - це спосіб згрупувати повʼязаний код, щоб уникати конфліктів імен; вони присутні майже в усіх кодових базах, крім найтривіальніших.

Синтаксис такий:

mod my_module {
    pub struct MyStruct {}

    pub struct OtherClass {}
}

За межами області видимості модуля до типів, укладених у модулі, звертаються, ставлячи перед назвою типу подвійну двокрапку (::). Або, що буває частіше, можна розмістити директиву use на початку файлу (чи всередині модуля), і тоді типи можна використовувати без префікса. Усередині того самого модуля немає потреби уточнювати назви типів.

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

Можна дати модулю або типу псевдонім за допомогою синтаксису use core::array::ArrayTrait as Arr;, а потім використовувати цей псевдонім усюди, де можна було б використати сам модуль або тип.

Вказівки

Керівництво починає застосовувати дарвінівські принципи до проєкту радіокерованої машинки. Розробників поділили на дві команди, Red і Blue, і кожна з них має покращувати конструкцію незалежно від іншої. Їм не потрібно перейматися проєктними рішеннями іншої команди. Нас попросили поглянути на код і зʼясувати, як найкраще поєднати зусилля обох команд для тестування.

1. Знайдіть доречніший спосіб ізолювати код обох команд

Будь ласка, використайте модулі, щоб краще виразити задум коду.

Наразі до важливих типів, як-от Motor і Telemetry, не кажучи вже про сам RemoteControlCar, додають префікс із кольором відповідної команди: <Color>RemoteControlCarTeam. Єдина мета цього префікса - дозволити типам з однаковими назвами співіснувати в одній програмі. Це краще виражається за допомогою модуля. Ми побачимо, що для цих цілей модуль має переваги над додаванням префіксів до назв типів.

2. Спростіть систему назв

Керівництво вимагає, щоб у визначеннях команди називалися «Red Remote Control Car Team» і «Blue Remote Control Car Team», і щоб ці довгі назви використовувалися навіть у самому коді. Однак ці назви досить громіздкі, коли ми посилаємося на команди.

Знайдіть спосіб використати коротші ідентифікатори «Red» і «Blue» у модулі, в якому ми будемо створювати машинки.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Cairo Exercism

Час розпочати Червоні проти синіх: у стилі Дарвіна?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Cairo, а також 25 концепцій68 вправ та справжнє наставництво від людей, і все це безкоштовно.