Elm - Registres

La structure de données d'enregistrement dans Elm peut être utilisée pour représenter les données sous forme de paires clé-valeur. Un enregistrement peut être utilisé pour organiser les données associées afin de faciliter l'accès et la mise à jour des données. Les enregistrements Elm sont similaires aux objets en JavaScript. Les éléments de données d'un enregistrement sont appelés champs.

Définition d'un enregistrement

Utilisez la syntaxe suivante pour définir un enregistrement -

Syntaxe

record_name = {fieldname1 = value1, fieldname2 = value2....fieldnameN = valueN}

Un enregistrement peut stocker des données de plusieurs types. Les noms de champ dans un enregistrement doivent être conformes aux règles générales de dénomination d'un identifiant Elm.

Accéder aux valeurs d'enregistrement

Utilisez la syntaxe suivante pour accéder aux champs individuels d'un enregistrement.

Syntaxe

record_name.fieldname

OU

.fieldname record_name

Illustration

Essayez ce qui suit dans la REPL Elm -

> company = {name="TutorialsPoint",rating=4.5}
{ name = "TutorialsPoint", rating = 4.5 } : { name : String, rating : Float }
> company.name
"TutorialsPoint" : String
> .rating company
4.5 : Float

Utilisation de l'enregistrement avec la liste

Un enregistrement peut être stocké dans une liste. Toutes les valeurs de champ de l'enregistrement doivent être du même type.

Syntaxe

list_name = [ {field_name1 = value1},{field_name1 = value2}]

OU

list_name = [record_name1, record_name2, record_name3....record_nameN]

Illustration

Essayez ce qui suit dans Elm REPL -

> [{name = "Mohtashim"},{name = "kannan"}]
[{ name = "Mohtashim" },{ name = "kannan" }] : List { name : String }
> record1 = {name = "FirstRecord"}
{ name = "FirstRecord" } : { name : String }
> record2 = {name = "SecondRecord"}
{ name = "SecondRecord" } : { name : String }
> recordList = [record1,record2]
[{ name = "FirstRecord" },{ name = "SecondRecord" }] : List { name : String }

Mettre à jour un enregistrement

Les enregistrements sont immuables dans Elm. Lorsqu'un enregistrement est mis à jour, un nouvel enregistrement avec des valeurs mises à jour est renvoyé. Le champ peut contenir une valeur d'un type différent lors de la mise à jour d'un enregistrement.

Syntaxe

{record_name | field_name1 = new_value1, field_name2 = new_value2,field_name3 = new_value3....field_nameN = new_valueN}

Illustration

Essayez ce qui suit dans Elm REPL -

> record1 = {name="FirstRecord"}
{ name = "FirstRecord" } : { name : String }
> record1_updated = {record1 | name = "FirstRecordUpdate"}
{ name = "FirstRecordUpdate" } : { name : String }
> record1
{ name = "FirstRecord" } : { name : String }
> record1 == record1_updated
False : Bool

Illustration

L'exemple suivant met à jour plusieurs champs d'un enregistrement. Essayez ce qui suit dans Elm REPL -

> record3 = {a = 1,b = 2,c = 3,d = 4,e = 5}
{ a = 1, b = 2, c = 3, d = 4, e = 5 }
: { a : number, b : number1, c : number2, d : number3, e : number4 }
> record4 = {record3 | d=400 ,e=500}
{ a = 1, b = 2, c = 3, d = 400, e = 500 }
: { a : number2, b : number3, c : number4, d : number, e : number1 }
>

Alias ​​de types

L'alias de type définit un schéma pour un enregistrement. En d'autres termes, un alias de type définit quels champs peuvent stocker les enregistrements et le type de valeur que ces champs peuvent stocker. Par conséquent, le programmeur ne fera pas d'erreur en manquant un attribut spécifique lors de l'attribution de valeurs.

Syntaxe

type alias alias_name = {field_name1:data_type,field_name2:data_type,....field_nameN:data_type}

Illustration

Exécutez ce qui suit dans Elm REPL -

> type alias Developer = { name:String,location:String,age:Int}
> dev1 = Developer "kannan" "Mumbai" 20
{ name = "kannan", location = "Mumbai", age = 20 } : Repl.Developer
> dev2 = Developer "mohtashim" "hyderabad" 20
{ name = "mohtashim", location = "hyderabad", age = 20 } : Repl.Developer
>

Maintenant, si vous oubliez de taper l'emplacement et l'âge, l'instruction renvoie une fonction, qui a des paramètres d'entrée pour les champs d'emplacement et d'âge.

> dev3 = Developer "Bhagavati"
<function> : String -> Int -> Repl.Developer
We can invoke the function as shown below and pass to it the values for location and age fields.
> dev3 "Pune" 25
{ name = "Bhagavati", location = "Pune", age = 25 } : Repl.Developer