St

Structs en Elixir

21 ejercicios

Acerca de Structs

Los structs son mapas especiales con un conjunto definido de claves.

  • Los structs proporcionan comprobaciones en tiempo de compilación y valores por defecto.
  • Un struct recibe el nombre del módulo en el que se define.
  • Para definir un struct, usa la construcción defstruct.
    • La construcción suele ir inmediatamente después de la definición del módulo.
  • defstruct acepta una lista de átomos (cuando el valor por defecto es nil) o listas de palabras clave (con valores por defecto concretos).
    • Los campos sin valor por defecto deben ir antes que los campos con valor por defecto.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

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

Acceder a los campos y actualizarlos

  • La mayoría de las funciones que trabajan con mapas también funcionan con structs.

  • Se recomienda usar el operador de acceso estático . para acceder a los campos de un struct.

  • Obtener/recuperar los valores de los campos:

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • Actualizar los valores de los campos

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

Exigir la inicialización de los valores de los campos

  • El atributo de módulo @enforce_keys crea una comprobación en tiempo de ejecución de que los campos indicados deben inicializarse con un valor que no sea nil al crear el struct.
  • A @enforce_keys le sigue una lista de las claves de los campos (que son átomos).
  • Si no se inicializa una clave exigida, se produce un error.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Structs

La práctica está bloqueada

Desbloquea 9 ejercicios más para practicar Structs