Élixir - Structs

Les structures sont des extensions construites sur des cartes qui fournissent des vérifications à la compilation et des valeurs par défaut.

Définition des structures

Pour définir une structure, la construction defstruct est utilisée -

defmodule User do
   defstruct name: "John", age: 27
end

La liste de mots clés utilisée avec defstruct définit les champs que la structure aura avec leurs valeurs par défaut. Les structures prennent le nom du module dans lequel elles sont définies. Dans l'exemple donné ci-dessus, nous avons défini une structure nommée User. Nous pouvons maintenant créer des structures utilisateur en utilisant une syntaxe similaire à celle utilisée pour créer des cartes -

new_john = %User{})
ayush = %User{name: "Ayush", age: 20}
megan = %User{name: "Megan"})

Le code ci-dessus générera trois structures différentes avec des valeurs -

%User{age: 27, name: "John"}
%User{age: 20, name: "Ayush"}
%User{age: 27, name: "Megan"}

Les structures fournissent des garanties à la compilation que seuls les champs (et tous) définis via defstruct seront autorisés à exister dans une structure. Vous ne pouvez donc pas définir vos propres champs une fois que vous avez créé la structure dans le module.

Accès et mise à jour des structures

Lorsque nous avons discuté des cartes, nous avons montré comment nous pouvons accéder et mettre à jour les champs d'une carte. Les mêmes techniques (et la même syntaxe) s'appliquent également aux structures. Par exemple, si nous voulons mettre à jour l'utilisateur que nous avons créé dans l'exemple précédent, alors -

defmodule User do
   defstruct name: "John", age: 27
end
john = %User{}
#john right now is: %User{age: 27, name: "John"}

#To access name and age of John, 
IO.puts(john.name)
IO.puts(john.age)

Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant -

John
27

Pour mettre à jour une valeur dans une structure, nous utiliserons à nouveau la même procédure que celle utilisée dans le chapitre map,

meg = %{john | name: "Meg"}

Les structures peuvent également être utilisées dans la correspondance de modèles, à la fois pour la correspondance sur la valeur de clés spécifiques et pour garantir que la valeur correspondante est une structure du même type que la valeur correspondante.