St

Structures en Elixir

21 exercices

À propos de Structures

Les structs sont des maps particuliers, avec un ensemble de clés défini.

  • Les structs offrent des vérifications à la compilation et des valeurs par défaut.
  • Un struct porte le nom du module dans lequel il est défini.
  • Pour définir un struct, on utilise la construction defstruct.
    • Cette construction suit généralement immédiatement la définition du module.
  • defstruct accepte soit une liste d'atomes (pour des valeurs par défaut à nil), soit des listes de mots-clés (pour des valeurs par défaut explicites).
    • Les champs sans valeur par défaut doivent précéder les champs avec valeur par défaut.
defmodule Plane do
  defstruct [:engine, wings: 2]
end

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

Accède aux champs et mets-les à jour

  • La plupart des fonctions qui manipulent des maps fonctionnent aussi avec les structs.

  • Pour accéder aux champs d'un struct, il est recommandé d'utiliser l'opérateur d'accès statique ..

  • Lire et récupérer les valeurs des champs :

    plane = %Plane{}
    plane.engine
    # => nil
    Map.fetch(plane, :wings)
    # => {:ok, 2}
    
  • Mettre à jour les valeurs des champs

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

Impose l'initialisation des valeurs des champs

  • L'attribut de module @enforce_keys crée une vérification à l'exécution : les champs concernés doivent être initialisés à une valeur qui n'est pas nil au moment de la création du struct.
  • @enforce_keys est suivi d'une liste de clés de champs (qui sont des atomes).
  • Si une clé imposée n'est pas initialisée, une erreur est levée.
defmodule User do
  @enforce_keys [:username]
  defstruct [:username]
end

%User{}
# => (ArgumentError) the following keys must also be given when building struct User: [:username]
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Structures

L'entraînement est verrouillé

Déverrouille 9 exercices de plus pour t'entraîner sur Structures