سا

ساختار در Elixir

21 تمرین

درباره‌ی ساختار

structها mapهای ویژهای با مجموعهای مشخص از کلیدها هستند.

  • structها بررسیهای زمان کامپایل و مقادیر پیش‌فرض را فراهم می‌کنند.
  • نام یک struct از ماژولی گرفته می‌شود که در آن تعریف شده است.
  • برای تعریف یک struct از defstruct استفاده کنید.
    • معمولاً این ساختار بلافاصله پس از تعریف ماژول می‌آید.
  • defstruct یا فهرستی از اتم‌ها را می‌پذیرد (برای مقادیر پیش‌فرض nil) یا فهرست‌های کلیدواژه را (برای مقادیر پیش‌فرض مشخص‌شده).
    • فیلدهای بدون مقدار پیش‌فرض باید پیش از فیلدهای دارای مقدار پیش‌فرض بیایند.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

plane = %Plane{}
# => %Plane{engine: nil, wings: 2}

دسترسی به فیلدها و به‌روزرسانی

  • بیشتر توابعی که با mapها کار می‌کنند، با structها هم کار می‌کنند.

    • Access Behaviour یک استثناست و برای structها پیاده‌سازی نشده است.
  • توصیه می‌شود برای دسترسی به فیلدهای struct از عملگر دسترسی ایستا . استفاده کنید.

  • گرفتن/واکشی مقادیر فیلد:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • به‌روزرسانی مقادیر فیلد

    plane = %Plane{}
    %{plane | wings: 4}
    # => %Plane{engine: nil, wings: 4}
    

الزام به مقداردهی اولیه‌ی فیلدها

  • ویژگی ماژول @enforce_keys یک بررسی در زمان اجرا ایجاد می‌کند که فیلدهای مشخص‌شده باید هنگام ساخت struct به مقداری غیر از nil مقداردهی شوند.
  • پس از @enforce_keys فهرستی از کلیدهای فیلد می‌آید (که اتم هستند).
  • اگر کلیدی که الزام شده مقداردهی نشود، خطایی بالا می‌آید.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

ساختار را یاد بگیرید

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

برای تمرین ساختار قفل 9 تمرین دیگر را باز کنید