مسیر
/
Elixir
Elixir
/
برنامه‌ی درسی
/
تابع چندشاخه‌ای
تا

تابع چندشاخه‌ای در Elixir

72 تمرین

درباره‌ی تابع چندشاخه‌ای

در Elixir، یک تابع واحد می‌تواند چندین «بند» داشته باشد. این کار با «تطبیق الگو» روی آرگومان‌های تابع و با استفاده از «گاردها» انجام می‌شود.

# pattern matching the argument
def number(7) do
  "Awesome, that's my favorite"
end

# using a guard
def number(n) when is_integer(n) do
  "That's not my favorite"
end

def number(_n) do
  "That's not even a number!"
end
  • برای بیرون کشیدن منطق کنترلی از توابع، از بندهای متعدد تابع استفاده کنید.
  • بندها به ترتیب، از بالای فایل منبع تا پایین آن، امتحان می‌شوند تا یکی از آن‌ها موفق شود.
  • اگر هیچ‌کدام موفق نشوند، ماشین مجازی BEAM یک FunctionClauseError پرتاب می‌کند.
  • اگر از متغیرهای آرگومان نه در بدنه‌ی تابع و نه در گارد استفاده نشود، باید یک _ به ابتدای اسمشان اضافه شود؛ در غیر این صورت کامپایلر هشدار می‌دهد.
  • توابع بی‌نام هم می‌توانند چندین بند داشته باشند.
    fn
      13 -> "Awesome, that's my favorite"
      _ -> "That's not my favorite"
    end
    

توجه داشته باشید که توابعی را که چند بند دارند، نباید با «سربارگذاری» توابعی که ممکن است از زبان‌های برنامه‌نویسی دیگر بشناسید اشتباه گرفت. در Elixir، توابع فقط با اسم و تعداد آرگومان‌هایشان شناسایی می‌شوند، نه با نوع آرگومان‌ها (چون «نوع‌دهی ایستا» وجود ندارد). تابع number/1 از مثال بالا، صرف‌نظر از تعداد بندهایش، یک تابع واحد به حساب می‌آید.

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

تابع چندشاخه‌ای را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین تابع چندشاخه‌ای قفل 10 تمرین دیگر را باز کنید