تط

تطبیق الگو در Elixir

73 تمرین

درباره‌ی تطبیق الگو

هنگام نوشتن توابع Elixir، می‌توانیم از سبکی قاطعانه همراه با تطبیق الگو استفاده کنیم:

def read_file() do
  {:ok, contents} = File.read("hello.txt")
  contents
end
  • تطبیق الگو به‌صراحت با استفاده از عملگر تطبیق، =/2، انجام می‌شود.

    • تطبیق‌ها زمانی موفق می‌شوند که شکلِ داده‌های سمت چپ عملگر با سمت راست مطابقت داشته باشد.

    • وقتی تطبیق‌ها موفق شوند، متغیرهای سمت چپ به مقادیر سمت راست مقید می‌شوند.

    • استفاده از زیرخط، _، به ما اجازه می‌دهد مقادیر آن جاها را نادیده بگیریم.

      {:ok, number, _} = {:ok, 5, [4.5, 6.3]}
      number
      # => 5 is bound to this variable
      
    • عملگر پین ^ را می‌توان به کار برد تا از مقید شدن دوباره‌ی یک متغیر جلوگیری کنیم و در عوض آن را با مقدار موجودش تطبیق دهیم.

      number = 10
      {:ok, ^number, _} = {:ok, 5, [4.5, 6.3]}
      # => ** (MatchError) no match of right hand side value: {:ok, 5, [4.5, 6.3]}
      
  • تطبیق الگو می‌تواند در سر شاخه‌ی تابع هم رخ دهد، به‌طوری که فقط آرگومان‌هایی که با الگو مطابقت دارند تابع را فراخوانی کنند.

  • متغیرها را می‌توان در تطبیق الگوی یک شاخه‌ی تابع مقید کرد.

    defmodule Example do
      def named_function(:a = atom_variable) do
        {atom_variable, 1}
      end
    end
    
    Example.named_function(:a)
    # => {:a, 1}
    # The first function clause matches, so it is invoked
    
    Example.named_function(:b)
    # => ** (FunctionClauseError) no function clause matching in Example.named_function/1
    
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

تطبیق الگو را یاد بگیرید

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

برای تمرین تطبیق الگو قفل 10 تمرین دیگر را باز کنید