Διαδρομές
/
Cairo
Cairo
/
Ασκήσεις
/
Ρομπότ Αεροδρομίου
Ρομπότ Αεροδρομίου

Ρομπότ Αεροδρομίου

Άσκηση εκμάθησης

Εισαγωγή

Οι γενικεύσεις σου επιτρέπουν να γράφεις κώδικα που λειτουργεί με πολλαπλούς τύπους χωρίς να επαναλαμβάνεις τον ίδιο κώδικα. Ορίζεις γενικευμένους τύπους χρησιμοποιώντας γωνιακές αγκύλες <T>, όπου το T είναι ένα σύμβολο θέσης για οποιονδήποτε τύπο.

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

Το Cairo απαιτεί όρια trait για να προσδιορίσεις ποιες πράξεις πρέπει να υποστηρίζει ο γενικευμένος τύπος. Μπορείς να προσθέσεις περιορισμούς χρησιμοποιώντας τη σύνταξη +:

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

Και οι δομές μπορούν να είναι γενικευμένες:

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

Και τα traits μπορούν να είναι γενικευμένα, επιτρέποντάς τους να λειτουργούν με διαφορετικούς τύπους:

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

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

Οι συναρτήσεις μπορούν να δέχονται γενικευμένες παραμέτρους με όρια trait, κάνοντάς τες να λειτουργούν με οποιονδήποτε τύπο που υλοποιεί το απαιτούμενο trait:

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

Οδηγίες

Το νέο αεροδρόμιο του Βερολίνου σε προσέλαβε ως προγραμματιστή για το εργαστήριο ρομπότ του. Έχουν κάποια αδέξια ρομπότ που μοιάζουν λίγο με ανθρώπους και προσπαθούν να τα αξιοποιήσουν για να βελτιώσουν την εξυπηρέτηση πελατών.

Η πρώτη σου δουλειά είναι να προγραμματίσεις το ρομπότ ώστε να χαιρετά τους ανθρώπους στη μητρική τους γλώσσα, αφού σαρώσουν τα διαβατήριά τους στον πάγκο αυτόματου check-in.

Το ρομπότ είναι περήφανο για τις ικανότητές του, οπότε πάντα θα λέει πρώτα ποια γλώσσα μπορεί να μιλήσει και μετά θα χαιρετά το άτομο. Για παράδειγμα, αν κάποιος σαρώσει ένα γερμανικό διαβατήριο, το ρομπότ θα πει:

I can speak German: Hallo Dietrich!

1. Δημιούργησε την αφηρημένη λειτουργικότητα χαιρετισμού

Πρέπει να οργανώσεις τον κώδικά σου έτσι ώστε εσύ και άλλοι προγραμματιστές να μπορείτε να προσθέτετε εύκολα γλώσσες.

Ως πρώτο βήμα, όρισε ένα trait Greeter με δύο συναρτήσεις.

  • language_name, που επιστρέφει τη γλώσσα (ένα ByteArray) που θα χρησιμοποιήσει το ρομπότ για να χαιρετήσει τον επισκέπτη.
  • greet, που δέχεται το όνομα ενός επισκέπτη (ένα ByteArray) και επιστρέφει το μήνυμα χαιρετισμού σε μια συγκεκριμένη γλώσσα (ένα ByteArray).

Έπειτα, υλοποίησε μια συνάρτηση say_hello που δέχεται το όνομα του επισκέπτη και κάτι που υλοποιεί το trait Greeter και επιστρέφει τον χαιρετισμό που θέλεις (ένα ByteArray). Για παράδειγμα, φαντάσου μια γερμανική υλοποίηση του Greeter για την οποία το language_name επιστρέφει "German" και το greet επιστρέφει "Hallo {name}!":

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

2. Υλοποίησε τα ιταλικά

Τώρα κάνε το ρομπότ να δουλεύει για ανθρώπους που σαρώνουν ιταλικά διαβατήρια.

Δημιούργησε ένα struct Italian και υλοποίησε τις δύο συναρτήσεις ώστε να καλύπτεις το trait Greeter από την εργασία 1. Μπορείς να χαιρετήσεις κάποιον στα ιταλικά με "Ciao {name}!".

3. Υλοποίησε τα γαλλικά

Πριν τελειώσεις τη μέρα σου, πρέπει να προσθέσεις τη δυνατότητα να χαιρετάς τους ανθρώπους στα γαλλικά.

Δημιούργησε ένα struct French και υλοποίησε τις δύο συναρτήσεις ώστε να καλύπτεις το trait Greeter. Μπορείς να χαιρετήσεις κάποιον στα γαλλικά με "Bonjour {name}!".

Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Cairo Exercism

Έτοιμος να ξεκινήσεις την άσκηση Ρομπότ Αεροδρομίου;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Cairo με 25 έννοιες68 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.