Треки
/
Elixir
Elixir
/
Салабус
/
Структури
Ст

Структури у Elixir

1 вправа

Про концепцію Структури

Структури - це особливі словники з визначеним набором ключів.

  • Структури забезпечують перевірки під час компіляції та типові значення.
  • Структура отримує назву від модуля, у якому її визначено.
  • Щоб визначити структуру, скористаймося конструкцією defstruct.
    • Зазвичай ця конструкція йде одразу після визначення модуля.
  • defstruct приймає або список атомів (для типових значень nil), або списки ключових слів (для заданих типових значень).
    • Поля без типових значень мають іти перед полями з типовими значеннями.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

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

Доступ до полів і оновлення

  • Більшість функцій, які працюють зі словниками, будуть працювати і зі структурами.

    • Access Behaviour є винятком і для структур не реалізована.
  • Для доступу до полів структури радимо використовувати оператор статичного доступу ..

  • Отримати значення полів:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • Оновити значення полів

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

Обовʼязкова ініціалізація значень полів

  • Атрибут модуля @enforce_keys створює перевірку під час виконання: указані поля мають бути ініціалізовані значенням, яке не дорівнює 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 вправ, щоб практикувати концепцію Структури