Elm - Recordes

A estrutura de dados de registro no Elm pode ser usada para representar dados como pares de valores-chave. Um registro pode ser usado para organizar dados relacionados para permitir fácil acesso e atualização de dados. Os registros do Elm são semelhantes aos objetos em JavaScript. Os elementos de dados em um registro são conhecidos como campos.

Definindo um Registro

Use a seguinte sintaxe para definir um registro -

Sintaxe

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

Um registro pode armazenar dados de vários tipos. Os nomes de campo em um registro devem estar em conformidade com as regras gerais para nomear um identificador Elm.

Acessando valores de registro

Use a seguinte sintaxe para acessar campos individuais em um registro.

Sintaxe

record_name.fieldname

OU

.fieldname record_name

Ilustração

Experimente o seguinte no 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

Usando registro com lista

Um registro pode ser armazenado dentro de uma lista. Todos os valores de campo do registro devem ser do mesmo tipo.

Sintaxe

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

OU

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

Ilustração

Experimente o seguinte no 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 }

Atualizar um registro

Os registros são imutáveis ​​no Elm. Quando um registro é atualizado, um novo registro com valores atualizados é retornado. O campo pode conter um valor de um tipo diferente ao atualizar um registro.

Sintaxe

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

Ilustração

Experimente o seguinte no 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

Ilustração

O exemplo a seguir atualiza vários campos de um registro. Experimente o seguinte no 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

O alias de tipo define um esquema para um registro. Em outras palavras, um alias de tipo define quais campos podem ser armazenados no registro e o tipo de valor que esses campos podem armazenar. Portanto, o programador não cometerá o erro de perder algum atributo específico ao atribuir valores.

Sintaxe

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

Ilustração

Execute o seguinte no 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
>

Agora, se você esquecer de digitar a localização e a idade, a instrução retorna uma função, que possui parâmetros de entrada para os campos de localização e idade.

> 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