Tracks
/
Elixir
Elixir
/
Übungen
/
Neuer Reisepass
Neuer Reisepass

Neuer Reisepass

Lernübung

Einführung

With

Die Spezialform with bietet eine Möglichkeit, sich auf den „Happy Path“ einer Reihe von möglicherweise fehlschlagenden Schritten zu konzentrieren und die Fehler erst später zu behandeln.

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

Bei jedem Schritt läuft die Kette weiter, wenn eine Klausel übereinstimmt, bis der do-Block ausgeführt wird. Stimmt eine Klausel nicht überein, stoppt die Kette und diese Klausel wird zurückgegeben. Du kannst außerdem einen else-Block verwenden, um fehlgeschlagene Übereinstimmungen abzufangen und den Rückgabewert zu ändern.

Anleitung

Dein Pass läuft bald ab, also musst du beim Bürgeramt vorbeischauen, um ihn zu erneuern. Aus Erfahrung weißt du, dass dein Bürgeramt nicht gerade unkompliziert ist, also beschließt du, dein Bestes zu geben und dich immer auf den „Happy Path" zu konzentrieren.

Du druckst das Formular aus, das du für deinen neuen Pass brauchst, füllst es aus, springst in dein Auto, fährst einmal um den Block, parkst und machst dich auf den Weg zum Amt.

Für alle folgenden Aufgaben musst du get_new_passport/3 implementieren und erweitern.

1. Betritt das Gebäude

Es stellt sich heraus, dass das Gebäude nur nachmittags geöffnet ist, und das nicht jeden Tag zur gleichen Zeit.

Rufe die Funktion enter_building/1 mit der aktuellen Zeit auf (die dir als erstes Argument von get_new_passport/3 übergeben wird). Wenn das Gebäude geöffnet ist, gibt die Funktion ein Tupel mit :ok und einem Zeitstempel zurück, den du später brauchst, andernfalls ein Tupel mit :error und einer Nachricht. Vorerst kann der Happy Path das :ok-Tupel zurückgeben.

Wenn du ein :error-Tupel bekommst, gib es mit dem else-Block zurück.

2. Gehe zur Auskunft und finde heraus, zu welchem Schalter du gehen musst

Die Auskunft ist berüchtigt für lange Kaffeepausen. Wenn du das Glück hast, dort jemanden anzutreffen, gibt man dir ein Handbuch, das erklärt, zu welchem Schalter du je nach deinem Geburtsdatum gehen musst.

Rufe die Funktion find_counter_information/1 mit der aktuellen Zeit auf. Du bekommst entweder ein Tupel mit :ok und einem Handbuch, dargestellt durch eine anonyme Funktion, oder ein Tupel mit :coffee_break und weiteren Anweisungen. In deinem Happy Path, in dem du das Handbuch erhältst, wende es auf deinen Geburtstag an (zweites Argument von get_new_passport/3). Es gibt die Nummer des Schalters zurück, zu dem du gehen musst. Gib ein :ok-Tupel mit dieser Schalternummer zurück.

Wenn du eine :coffee_break-Nachricht bekommst, gib ein Tupel mit :retry und einem NaiveDateTime zurück, das auf 15 Minuten nach der aktuellen Zeit verweist. Wie zuvor: Wenn du ein :error-Tupel bekommst, gib es zurück.

3. Gehe zum Schalter und lass dein Formular abstempeln

Aus irgendeinem Grund verlangen verschiedene Schalter Formulare in verschiedenen Farben. Natürlich hast du das erste Formular ausgedruckt, das du auf der Website gefunden hast, also konzentrierst du dich auf deinen Happy Path und hoffst auf das Beste.

Rufe die Funktion stamp_form/3 mit dem Zeitstempel auf, den du am Eingang erhalten hast, dem Schalter und dem Formular, das du mitgebracht hast (letztes Argument von get_new_passport/3). Du bekommst entweder ein Tupel mit :ok und einer Prüfsumme, die zur Überprüfung deiner Passnummer verwendet wird, oder ein Tupel mit :error und einer Nachricht. Lass deinen Happy Path ein :ok-Tupel mit der Prüfsumme zurückgeben. Wenn du ein :error-Tupel bekommst, gib es zurück.

4. Erhalte deinen neuen Pass

Endlich hast du alle Dokumente, die du brauchst.

Rufe get_new_passport_number/3 mit dem Zeitstempel, dem Schalter und der Prüfsumme auf, die du vorher erhalten hast. Du erhältst einen String mit deiner endgültigen Passnummer. Alles, was dir noch bleibt, ist, diesen String in einem Tupel mit :ok zurückzugeben und nach Hause zu gehen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Neuer Reisepass zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.