مسیرها
/
Elixir
Elixir
/
تمرین‌ها
/
نیاز به سرعت
نیاز به سرعت

نیاز به سرعت

تمرین یادگیری

مقدمه

Alias

برای به اشتراک گذاشتن کد بین ماژول‌های مختلف Elixir در یک پروژه، باید ماژول بیرونی را با اسم کاملش ارجاع دهید. اما اگر آن اسم خیلی طولانی یا گیج‌کننده باشد چه؟

فرم ویژه‌ی alias به شما اجازه می‌دهد اسمی را که با آن به یک ماژول بیرونی ارجاع می‌دهید کوتاه‌تر کنید یا تغییر دهید. وقتی بدون هیچ آرگومانی استفاده شود، اسم ماژول را به آخرین بخش آن کوتاه می‌کند؛ برای مثال MyApp.Logger.Settings به Settings تبدیل می‌شود. می‌توانید با گزینه‌ی :as یک اسم دلخواه تعیین کنید.

معمولاً این کار در ابتدای تعریف ماژول انجام می‌شود.

defmodule Square do
  alias Integer, as: I

  def area(a), do: I.pow(a, 2)
end

Import

فرم ویژه‌ی import به شما اجازه می‌دهد از توابع یک ماژول بیرونی بدون آوردن اسم آن ماژول استفاده کنید.

وارد کردن یک ماژول بیرونی به‌صورت کامل ممکن است با توابع محلی موجود تعارض ایجاد کند. برای جلوگیری از این کار، دو گزینه در دسترس است: :except و :only. هر دو یک لیست کلیدواژه می‌گیرند که کلید آن، اسم تابع و مقدار آن، تعداد آرگومان‌های تابع است.

معمولاً این کار هم در ابتدای تعریف ماژول انجام می‌شود.

defmodule Square do
  import Integer, only: [pow: 2]

  def area(a), do: pow(a, 2)
end

دستورالعمل‌ها

آن ماشین کنترلی که چندی پیش خریده‌اید، به یک سرگرمی کاملاً تازه تبدیل شده است. شما مشغول برگزاری مسابقه‌های ماشین کنترلی بوده‌اید.

نزدیک بود نوشتن برنامه‌ای را تمام کنید که با آن بتوان شبیه‌سازی مسابقه‌ها را اجرا کرد که ناگهان گربه‌تان روی صفحه‌کلید پرید و چند خط از کد را پاک کرد. حالا برنامه‌تان دیگر کامپایل نمی‌شود...

1. رفع خطای کامپایل Race.__struct__/0 is undefined

یک alias اضافه کنید تا بتوان ماژول NeedForSpeed.Race را با اسم کوتاه‌تر Race ارجاع داد.

2. رفع خطای کامپایل Car.__struct__/0 is undefined

یک alias اضافه کنید تا بتوان ماژول NeedForSpeed.RemoteControlCar را با اسم کوتاه‌تر Car ارجاع داد.

3. رفع خطای کامپایل undefined function puts/1

تابع puts/1 از ماژول IO می‌آید. آن را import کنید تا بتوانید بدون ارجاع دادن به ماژول از آن استفاده کنید.

4. رفع خطای کامپایل undefined function default_color/0

توابع default_color/0، red/0، cyan/0 و green/0 همه از ماژول IO.ANSI می‌آیند. قصد دارید پشتیبانی از رنگ‌های دیگر ماشین را هم اضافه کنید، پس می‌خواهید کل ماژول را import کنید. متأسفانه تابع color/1 از ماژول IO.ANSI با یکی از توابع محلی‌تان تداخل دارد. کل ماژول IO.ANSI را به‌جز آن یک تابع import کنید.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elixir Exercism

آماده‌اید نیاز به سرعت را شروع کنید؟

در Exercism ثبت‌نام کنید تا Elixir را همراه با 58 مفهوم168 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.