المسارات
/
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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.