Track
/
Cairo
Cairo
/
Esercizi
/
Robot dell'aeroporto
Robot dell'aeroporto

Robot dell'aeroporto

Esercizio di apprendimento

Introduzione

I generici ti permettono di scrivere codice che funziona con più tipi senza duplicazioni. Definisci i tipi generici usando le parentesi angolari (<T>), dove T è un segnaposto per qualsiasi tipo.

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

Cairo richiede vincoli sui trait per specificare quali operazioni il tipo generico deve supportare. Puoi aggiungere i vincoli usando la sintassi +:

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

Anche le struct possono essere generiche:

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

Anche i trait possono essere generici, il che permette loro di funzionare con tipi diversi:

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

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

Le funzioni possono accettare parametri generici con vincoli sui trait, così da funzionare con qualsiasi tipo che implementi il trait richiesto:

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

Istruzioni

Il nuovo aeroporto di Berlino ti ha assunto come sviluppatore per il laboratorio dei suoi robot. Hanno dei robot goffi, dall'aspetto un po' umanoide, che stanno cercando di usare per migliorare il servizio clienti.

Il tuo primo incarico è programmare il robot perché saluti le persone nella loro lingua madre dopo aver scansionato il passaporto al banco del check-in automatico.

Il robot è orgoglioso delle sue capacità, quindi dirà sempre prima quale lingua sa parlare e poi saluterà la persona. Per esempio, se qualcuno scansiona un passaporto tedesco, il robot dirà:

I can speak German: Hallo Dietrich!

1. Crea la funzionalità di saluto astratta

Devi strutturare il codice in modo che tu e gli altri sviluppatori possiate aggiungere lingue facilmente.

Come primo passo, definisci un trait Greeter con due funzioni.

  • language_name che restituisce la lingua (un ByteArray) che il robot userà per salutare il visitatore.
  • greet che accetta il nome di un visitatore (un ByteArray) e restituisce il messaggio di saluto in una lingua specifica (un ByteArray).

Poi implementa una funzione say_hello che accetta il nome del visitatore e qualcosa che implementa il trait Greeter e restituisce il saluto desiderato (un ByteArray). Per esempio, immagina un'implementazione tedesca di Greeter in cui language_name restituisce "German" e greet restituisce "Hallo {name}!":

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

2. Implementa l'italiano

Ora fai in modo che il robot funzioni per le persone che scansionano passaporti italiani.

Crea lo struct Italian e implementa le due funzioni per soddisfare il trait Greeter del compito 1. Puoi salutare qualcuno in italiano con "Ciao {name}!".

3. Implementa il francese

Prima di chiudere la giornata, dovresti aggiungere la funzionalità per salutare le persone in francese.

Crea lo struct French e implementa le due funzioni per soddisfare il trait Greeter. Puoi salutare qualcuno in francese con "Bonjour {name}!".

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Cairo Exercism

Vuoi iniziare Robot dell'aeroporto?

Iscriviti a Exercism per imparare e padroneggiare Cairo con 25 concetti68 esercizi e il mentoring di persone reali, tutto gratis.