Modulos
Todos sabemos que tener todas las funciones en un mismo archivo sin nin gun scope o orden es muy propicio al caos general. Por esta razón Elixir nos brinda el concepto de modulo.
Un Modulo nos permite organizar nuestras funciones dentro de un espacio de nombre. Además de agrupar las funciones, nos permiten definir funciones nombradas y privadas.
Definamos un modulo de ejemplo:
defmodule Example do
def greeting(name) do
"Hello #{name}."
end
end
iex> Example.greeting "Sean"
"Hello Sean."
Es posible anidar módulos en Elixir, lo que le permite ampliar el espacio de nombres de su funcionalidad:
defmodule Example.Greetings do
def morning(name) do
"Good morning #{name}."
end
def evening(name) do
"Good night #{name}."
end
end
iex> Example.Greetings.morning "Sean"
"Good morning Sean."
Atributos de los Modulos
Los atributos de los modulos pueden ser vistos como constantes. Veamos un ejemplo:
defmodule Example do
@greeting "Hello"
def greeting(name) do
~s(#{@greeting} #{name}.)
end
end
Es importante observar que hay atributos reservados en Elixir. Los tres más comunes son:
- moduledoc - Documentos del módulo actual.
- doc - Documentación para funciones y macros.
- behaviour - Usado en OTP o un comportamiento definido por el usuario.