A with speciális forma lehetővé teszi, hogy egy sor potenciálisan hibázó lépés „happy path”-jára összpontosíts, a hibák kezelését pedig hagyd későbbre.
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
Minden lépésnél, ha egy ág illeszkedik, a lánc mindaddig folytatódik, amíg a do blokk végre nem hajtódik. Ha egy illesztés meghiúsul, a lánc leáll, és a nem illeszkedő ág értékével tér vissza. Arra is van lehetőséged, hogy egy else blokkal elkapd a sikertelen illesztéseket, és módosítsd a visszatérési értéket.
Mindjárt lejár az útleveled, ezért be kell néznod a városi hivatalba, hogy meghosszabbítsd. Korábbi tapasztalatból tudod, hogy a városi hivatalod ügyintézése nem éppen a legegyszerűbb, ezért elhatározod, hogy mindig igyekszel „a happy pathra összpontosítani”.
Kinyomtatod az új útlevélhez szükséges nyomtatványt, kitöltöd, beugrasz az autóba, körbemész a háztömb körül, parkolsz, és elindulsz a hivatalba.
A következő részfeladatok mindegyikéhez a get_new_passport/3 függvényt kell megvalósítanod és bővítened.
Kiderül, hogy az épület csak délután van nyitva, és nem is minden nap ugyanakkor.
Hívd meg az enter_building/1 függvényt az aktuális idővel (amelyet a get_new_passport/3 első argumentumaként kapsz). Ha az épület nyitva van, a függvény egy :ok atomot és egy később szükséges időbélyeget tartalmazó tuple-t ad vissza, ellenkező esetben egy :error atomot és egy üzenetet tartalmazó tuple-t. Egyelőre a happy path visszaadhatja a :ok tuple-t.
Ha :error tuple-t kapsz, az else blokkal add vissza.
Az információs pult híres arról, hogy hosszú kávészüneteket tart. Ha olyan szerencsés vagy, hogy találsz ott valakit, ad neked egy útmutatót, amely elmagyarázza, hogy a születési dátumodtól függően melyik ablakhoz kell menned.
Hívd meg a find_counter_information/1 függvényt az aktuális idővel. Vagy egy :ok atomot és egy útmutatót tartalmazó tuple-t kapsz, ahol az útmutatót egy anonim függvény képviseli, vagy egy :coffee_break atomot és további utasításokat tartalmazó tuple-t. A happy path során, amikor megkapod az útmutatót, alkalmazd azt a születésnapodra (a get_new_passport/3 második argumentuma). Ez visszaadja annak az ablaknak a számát, ahová menned kell. Adj vissza egy :ok tuple-t ezzel az ablakszámmal.
Ha :coffee_break üzenetet kapsz, adj vissza egy :retry atomot és egy NaiveDateTime-ot tartalmazó tuple-t, amely az aktuális idő után 15 perccel későbbi időpontra mutat. Mint korábban, ha :error tuple-t kapsz, add vissza.
Valamilyen oknál fogva a különböző ablakokban más színű nyomtatványokra van szükség. Persze te azt nyomtattad ki, amelyiket először megtaláltad a weboldalon, ezért a happy pathra összpontosítasz, és a legjobbat reméled.
Hívd meg a stamp_form/3 függvényt a bejáratnál kapott időbélyeggel, az ablakkal és a hozott nyomtatvánnyal (a get_new_passport/3 utolsó argumentuma). Vagy egy :ok atomot és egy ellenőrző összeget tartalmazó tuple-t kapsz, amelyet majd az útlevélszámod ellenőrzésére használnak, vagy egy :error atomot és egy üzenetet tartalmazó tuple-t. A happy path adjon vissza egy :ok tuple-t az ellenőrző összeggel. Ha :error tuple-t kapsz, add vissza.
Végre minden szükséges dokumentum a kezedben van.
Hívd meg a get_new_passport_number/3 függvényt az időbélyeggel, az ablakkal és a korábban kapott ellenőrző összeggel. Megkapod a végleges útlevélszámodat tartalmazó stringet, és már nem marad más hátra, mint hogy visszaadd ezt a stringet egy :ok atomot tartalmazó tuple-ben, és hazamenj.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.