مسیرها
/
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 برگردانید که به ۱۵ دقیقه بعد از زمان کنونی اشاره می‌کند. مثل قبل، اگر تاپلی با :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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.