Διαδρομές
/
Elixir
Elixir
/
Ασκήσεις
/
Νέο διαβατήριο
Νέο διαβατήριο

Νέο διαβατήριο

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

Εισαγωγή

With

Η ειδική μορφή with παρέχει έναν τρόπο να εστιάσεις στην "ομαλή διαδρομή" μιας σειράς βημάτων που μπορούν να αποτύχουν, και να αντιμετωπίσεις τις αποτυχίες αργότερα.

with {:ok, id} <- get_id(username),
     {:ok, avatar} <- fetch_avatar(id),
     {:ok, image_type} <- check_valid_image_type(avatar) do
  {:ok, image_type, avatar}
else
  :not_found ->
    {:error, "invalid username"}

  {:error, "not an image"} ->
    {:error, "avatar associated to #{username} is not an image"}

  err ->
    err
end

Σε κάθε βήμα, αν μια ρήτρα ταιριάξει, η αλυσίδα θα συνεχιστεί μέχρι να εκτελεστεί το μπλοκ do. Αν μια αντιστοίχιση αποτύχει, η αλυσίδα σταματά και επιστρέφεται η ρήτρα που δεν ταιριάζει. Έχεις την επιλογή να χρησιμοποιήσεις ένα μπλοκ else για να πιάσεις τις αποτυχημένες αντιστοιχίσεις και να τροποποιήσεις την τιμή επιστροφής.

Οδηγίες

Το διαβατήριό σου πρόκειται να λήξει, οπότε πρέπει να περάσεις από το δημοτικό γραφείο για να το ανανεώσεις. Ξέρεις από προηγούμενη εμπειρία ότι το δημοτικό γραφείο δεν είναι απαραίτητα το πιο εύκολο στη συναλλαγή, οπότε αποφασίζεις να κάνεις ό,τι μπορείς για να "επικεντρώνεσαι πάντα στην ευνοϊκή διαδρομή".

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

Όλες οι παρακάτω εργασίες θα απαιτήσουν να υλοποιήσεις και να επεκτείνεις τη συνάρτηση get_new_passport/3.

1. Μπες στο κτίριο

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

Κάλεσε τη συνάρτηση enter_building/1 με την τρέχουσα ώρα (που σου δίνεται ως πρώτο όρισμα της get_new_passport/3). Αν το κτίριο είναι ανοιχτό, η συνάρτηση θα επιστρέψει μια πλειάδα με :ok και μια χρονοσφραγίδα που θα χρειαστείς αργότερα, αλλιώς μια πλειάδα με :error και ένα μήνυμα. Για την ώρα, η ευνοϊκή διαδρομή μπορεί να επιστρέψει την πλειάδα :ok.

Αν λάβεις μια πλειάδα :error, χρησιμοποίησε το μπλοκ else για να την επιστρέψεις.

2. Πήγαινε στο γραφείο πληροφοριών και βρες σε ποιο γκισέ πρέπει να πας

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

Κάλεσε τη συνάρτηση find_counter_information/1 με την τρέχουσα ώρα. Θα λάβεις είτε μια πλειάδα με :ok και ένα εγχειρίδιο, που αναπαρίσταται από μια ανώνυμη συνάρτηση, είτε μια πλειάδα με :coffee_break και περισσότερες οδηγίες. Στην ευνοϊκή σου διαδρομή όπου λαμβάνεις το εγχειρίδιο, εφάρμοσέ το στην ημερομηνία γέννησής σου (δεύτερο όρισμα της get_new_passport/3). Θα επιστρέψει τον αριθμό του γκισέ όπου πρέπει να πας. Επίστρεψε μια πλειάδα :ok με αυτόν τον αριθμό γκισέ.

Αν λάβεις ένα μήνυμα :coffee_break, επίστρεψε μια πλειάδα με :retry και ένα NaiveDateTime που δείχνει 15 λεπτά μετά την τρέχουσα ώρα. Όπως και πριν, αν λάβεις μια πλειάδα :error, επίστρεψέ την.

3. Πήγαινε στο γκισέ και πάρε το έντυπό σου σφραγισμένο

Για κάποιο λόγο, διαφορετικά γκισέ απαιτούν έντυπα διαφορετικών χρωμάτων. Φυσικά, εκτύπωσες το πρώτο που βρήκες στον ιστότοπο, οπότε επικεντρώνεσαι στην ευνοϊκή σου διαδρομή και ελπίζεις για το καλύτερο.

Κάλεσε τη συνάρτηση stamp_form/3 με τη χρονοσφραγίδα που έλαβες στην είσοδο, το γκισέ και το έντυπο που έφερες (τελευταίο όρισμα της get_new_passport/3). Θα λάβεις είτε μια πλειάδα με :ok και ένα άθροισμα ελέγχου που θα χρησιμοποιηθεί για να επαληθεύσει τον αριθμό του διαβατηρίου σου, είτε μια πλειάδα με :error και ένα μήνυμα. Κάνε την ευνοϊκή σου διαδρομή να επιστρέψει μια πλειάδα :ok με το άθροισμα ελέγχου. Αν λάβεις μια πλειάδα :error, επίστρεψέ την.

4. Πάρε το νέο σου διαβατήριο

Επιτέλους, έχεις όλα τα έγγραφα που χρειάζεσαι.

Κάλεσε τη get_new_passport_number/3 με τη χρονοσφραγίδα, το γκισέ και το άθροισμα ελέγχου που έλαβες νωρίτερα. Θα λάβεις μια συμβολοσειρά με τον τελικό αριθμό του διαβατηρίου σου, το μόνο που μένει είναι να επιστρέψεις αυτή τη συμβολοσειρά σε μια πλειάδα με :ok και να πας σπίτι.

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

Έτοιμος να ξεκινήσεις την άσκηση Νέο διαβατήριο;

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