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