St

Structs em Elixir

21 exercícios

Sobre Structs

Structs são mapas especiais, com um conjunto definido de chaves.

  • Structs oferecem verificações em tempo de compilação e valores padrão.
  • Uma struct recebe o nome do módulo em que é definida.
  • Para definir uma struct, use a construção defstruct.
    • A construção normalmente vem logo depois da definição do módulo.
  • defstruct aceita uma lista de átomos (para valores padrão nil) ou listas de palavras-chave (para valores padrão especificados).
    • Os campos sem valor padrão precisam vir antes dos campos com valor padrão.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

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

Acessar 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 acessar os campos de uma struct.

  • Obter/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}
    

Tornar obrigatória 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 precisam ser inicializados com um valor que não seja nil quando a struct é criada.
  • @enforce_keys é seguido por uma lista das chaves dos campos (que são átomos).
  • Se uma chave obrigatória não for inicializada, um erro é lançado.
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 O link abre em uma nova janela ou aba

Aprenda Structs

A prática está bloqueada

Desbloqueie mais 9 exercícios para praticar Structs