Elm - Records

La estructura de registro de datos en Elm se puede utilizar para representar datos como pares clave-valor. Se puede utilizar un registro para organizar los datos relacionados para permitir un fácil acceso y actualización de los datos. Los registros Elm son similares a los objetos en JavaScript. Los elementos de datos de un registro se conocen como campos.

Definición de un registro

Utilice la siguiente sintaxis para definir un registro:

Sintaxis

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

Un registro puede almacenar datos de varios tipos. Los nombres de campo en un registro deben cumplir con las reglas generales para nombrar un identificador de Elm.

Accediendo a valores de registro

Utilice la siguiente sintaxis para acceder a campos individuales en un registro.

Sintaxis

record_name.fieldname

O

.fieldname record_name

Ilustración

Pruebe lo siguiente en Elm REPL:

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

Uso de Record with List

Un registro se puede almacenar dentro de una lista. Todos los valores de campo del registro deben ser del mismo tipo.

Sintaxis

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

O

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

Ilustración

Pruebe lo siguiente en 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 }

Actualizar un registro

Los registros son inmutables en Elm. Cuando se actualiza un registro, se devuelve un nuevo registro con valores actualizados. El campo puede contener un valor de un tipo diferente al actualizar un registro.

Sintaxis

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

Ilustración

Pruebe lo siguiente en 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

Ilustración

El siguiente ejemplo actualiza varios campos de un registro. Pruebe lo siguiente en 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 tipos

El alias de tipo define un esquema para un registro. En otras palabras, un alias de tipo define qué campos puede almacenar el registro y el tipo de valor que pueden almacenar estos campos. Por lo tanto, el programador no se equivocará al perder ningún atributo específico al asignar valores.

Sintaxis

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

Ilustración

Ejecute lo siguiente en 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
>

Ahora bien, si olvida escribir ubicación y edad, la declaración devuelve una función, que tiene parámetros de entrada para los campos de ubicación y edad.

> 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