Есть ли геттеры и сеттеры в Elixir или есть другие варианты?

Извините ребята за глупый вопрос, я знаю что Elixir это функциональный язык программирования, но мне просто очень хочется узнать как сделать не используя get/set. Задача такая,к примеру у нас, есть переменная и мы хотим сохранять только определенной длины текстовое значения. Вот к примеру как я сделал на Dart, пожалуйста ребята не судите меня строго. Мне просто интересно можно такой вариант сделать Elixir

class X {
  String Zem = "";
  String get xx {
    return Zem;
  }

  set xx(String sum) {
    if (sum.length < 5) {
      print("No");
    } else {
      this.Zem = sum;
      print("Welcom ${Zem.toUpperCase()}");
    }
  }
}

void main() {
  X c = new X();
  c.xx = "xamarin";
}

Ответы (1 шт):

Автор решения: Alexandr Sysoev

В Elixir используется акторная модель с иммутабельными структурами данных, поэтому для решения подобной задачи может использоваться абстракция, которая называется Agent.

defmodule X do
  use Agent

  def start_link(initial_value) do
    Agent.start_link(fn -> initial_value end, name: __MODULE__)
  end

  def get do
    Agent.get(__MODULE__, & &1)
  end

  def set(new_value) do
    Agent.update(__MODULE__, fn _ -> new_value end)
  end
end

Далее можно использовать этот агент из любого места в проекте примерно вот так:

X.start_link("") # {:ok, #PID<0.126.0>}
X.get()          # ""
X.set("xamarin") # :ok
X.get()          # "xamarin"
→ Ссылка