Kurzusok
/
Cairo
Cairo
/
Feladatok
/
Repülőtéri robot
Repülőtéri robot

Repülőtéri robot

Tanulófeladat

Bevezetés

A generikusok lehetővé teszik, hogy olyan kódot írj, amely több típussal is működik, duplikáció nélkül. A generikus típusokat úgy definiálod, hogy csúcsos zárójeleket használsz: <T>, ahol a T bármely típus helyőrzője.

fn largest_list<T>(l1: Array<T>, l2: Array<T>) -> Array<T> {
    if l1.len() > l2.len() {
        l1
    } else {
        l2
    }
}

A Cairo megköveteli a trait-korlátokat, hogy meghatározzák, milyen műveleteket kell a generikus típusnak támogatnia. A megkötéseket a + szintaxissal adhatod hozzá:

fn process_data<T, +Drop<T>, +Copy<T>>(value: T) -> T {
    // Function body
}

A struktúrák is lehetnek generikusak:

#[derive(Drop)]
struct Container<T> {
    value: T,
}

A trait-ek is lehetnek generikusak, így különböző típusokkal is működhetnek:

trait Processor<T> {
    fn process(self: @T) -> ByteArray;
}

impl MyProcessor<T, +Drop<T>> of Processor<T> {
    fn process(self: @T) -> ByteArray {
        "processed"
    }
}

A függvények elfogadhatnak generikus paramétereket trait-korlátokkal, így bármely olyan típussal működnek, amely megvalósítja a szükséges traitet:

fn use_processor<T, +Processor<T>, +Drop<T>>(item: T) -> ByteArray {
    item.process()
}

Utasítások

A berlini új repülőtér fejlesztőként vett fel a robotlaborjukba. Vannak esetlen, némileg emberszerű robotjaik, amelyekkel az ügyfélszolgálatot próbálják javítani.

Első feladatod, hogy megtanítsd a robotot arra, hogy az anyanyelvükön köszöntse az embereket, miután azok beszkennelték az útlevelüket az önkiszolgáló bejelentkezőpultnál.

A robot büszke a képességeire, ezért mindig először megmondja, milyen nyelven tud beszélni, és csak utána köszönti az embert. Ha például valaki német útlevelet szkennel be, a robot ezt mondaná:

I can speak German: Hallo Dietrich!

1. Hozd létre az absztrakt üdvözlési funkciót

Úgy kell felépítened a kódot, hogy te és a többi fejlesztő könnyedén új nyelveket adhassatok hozzá.

Első lépésként definiálj egy Greeter traitet két függvénnyel.

  • language_name, amely visszaadja azt a nyelvet (egy ByteArray), amelyen a robot köszönti a látogatót.
  • greet, amely fogadja a látogató nevét (egy ByteArray), és visszaadja az adott nyelvű üdvözlő üzenetet (egy ByteArray).

Ezután implementálj egy say_hello függvényt, amely fogadja a látogató nevét és valamit, ami megvalósítja a Greeter traitet, majd visszaadja a kívánt üdvözlés (egy ByteArray). Képzelj el például egy német Greeter implementációt, amelynél a language_name a "German" értéket adja vissza, a greet pedig a "Hallo {name}!" értéket:

say_hello("Dietrich", germanGreeter)
// => "I can speak German: Hallo Dietrich!"

2. Az olasz megvalósítása

Most gondoskodj róla, hogy a robot az olasz útlevelet beszkennelő emberekkel is működjön.

Hozz létre egy Italian structot, és valósítsd meg a két függvényt, hogy teljesüljön az 1. feladat Greeter traitje. Olaszul a "Ciao {name}!" szöveggel köszönthetsz valakit.

3. A francia megvalósítása

Mielőtt leteszed a munkát, hozzá kell adnod a franciául köszöntő funkciót.

Hozz létre egy French structot, és valósítsd meg a két függvényt, hogy teljesüljön a Greeter trait. Franciául a "Bonjour {name}!" szöveggel köszönthetsz valakit.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Cairo Exercism

Készen állsz elkezdeni a(z) Repülőtéri robot feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Cairo nyelvet 25 fogalom68 feladat segítségével, valódi emberi mentorálással, mindez ingyen.