St

Structs em Elixir

21 exercícios

Sobre Structs

As structs são mapas especiais com um conjunto definido de chaves.

  • As structs proporcionam verificações em tempo de compilação e valores predefinidos.
  • Uma struct tem o nome do módulo em que é definida.
  • Para definir uma struct, usa a construção defstruct.
    • A construção surge normalmente logo após a definição do módulo.
  • defstruct aceita quer uma lista de átomos (para valores predefinidos nil) quer listas de palavras-chave (para valores predefinidos especificados).
    • Os campos sem valores predefinidos têm de preceder os campos com valores predefinidos.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

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

Aceder aos campos e atualizar

  • A maioria das funções que trabalham com mapas também funciona com structs.

  • Recomenda-se usar o operador de acesso estático . para aceder aos campos da struct.

  • Obter/ir buscar valores dos campos:

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

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

Impor a inicialização dos valores dos campos

  • O atributo de módulo @enforce_keys cria uma verificação em tempo de execução de que os campos especificados têm de ser inicializados com um valor não nil quando a struct é criada.
  • @enforce_keys é seguido de uma lista das chaves dos campos (que são átomos).
  • Se uma chave imposta não for inicializada, é lançado um erro.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Structs

A prática está bloqueada

Desbloqueia mais 9 exercícios para praticares Structs