Aula 9 - Entendendo o que são os Records.
Quando você tem muitas informações em seus programas, precisa começar a se preocupar em como organiza-las.
Você já aprendeu a criar listas usando os símbolos [ e ]. Esta é uma das formas de organizar. Outra é através dos Records.
Esta aula será bastante teórica, mas você precisa entender alguns conceitos importantes para conseguir dar continuidade aos estudos.
O que você irá aprender nesta aula?
- O que são os Records.
- Como criar uma função que recebe um Record como parâmetro.
1- O que são os Records.
Record é uma forma de organizar nossos dados na linguagem de programação Elm.
Vamos partir de um código criado sem o uso de Records para entender o tipo de problemas que possivelmente vamos enfrentar.
Com o que aprendemos até agora, para criar uma função que recebe como parâmetro um ponto no espaço, passamos dois argumentos numéricos separados: x e y, como no exemplo abaixo:
import Playground exposing (..)
main =
picture
[ circuloVerde 10 20
]
circuloVerde x y =
circle green 50
|> move x y
Você consegue entender o que está acontecendo no código acima?
Caso tenha dificuldades, volte para a aula 4 para
revisar como criar uma função parametrizada.
Neste exemplo nossa função circuloVerde recebe dois parâmetros numéricos que chamamos de x e y. Neste caso isso é suficiente e funciona bem. Mas podemos fazer de uma outra maneira: podemos criar uma estrutura (ou um Record) que representa um Ponto. A ideia é deixar mais explícito no código o que essa informação representa.
Então Record é uma estrutura de dados com rótulos. Abaixo temos um exemplo de um Record.
{ x = 10, y = 15 }
Na linguagem Elm, tudo que estiver entre { e } é um record.
2. Como criar uma função que recebe um Record como parâmetro.
Podemos agora alterar o código anterior para que nossa função circuloVerde receba um Record:
import Playground exposing (..)
main =
picture
[ circuloVerde {x = 10, y = 20}
]
circuloVerde {x, y} =
circle green 50
|> move x y
Se preferirmos, podemos também armazenar estes valores em uma variável, como no exemplo abaixo:
import Playground exposing (..)
posicao = {x = 10, y = 20}
main =
picture
[ circuloVerde posicao
]
circuloVerde {x, y} =
circle green 50
|> move x y
Agora ficou um pouco mais claro o que significa o 10 e o 20, mas podemos dar um passo além. É possível dar um nome (um alias) para esta estrutura.
Criando um alias.
No código abaixo definimos o que é um Ponto2D. Podemos dar um qualquer nome, mas ele deve começar obrigatóriamente com uma letra maiúscula.
type alias Ponto2D =
{ x : Number
, y : Number
}
Neste código, explicamos para o computador que um Ponto2D é uma estrutura de dados que contém dois campos: o x e o y. Desta vez também avisamos o computador que estes campos devem armazer dados do tipo Number (número em inglês).
A linguagem de programação Elm possui uma série de tipos de dados que podemos utilizar. Alguns exemplos são: Number, Int, String, Bool, List, Float, entre outras. Mas não se preocupe em decorar isso! Ao longo do curso vamos aprender quando utilizá-las.
Ao criar um novo alias Ponto2D apenas definirmos o que ele representa, mas ainda não criamos um ponto efetivamente. A linguagem Elm automatizamente disponibilizará uma nova função chamada Ponto2D (esperando os respectivos parâmetros definidos no alias), que chamamos de construtor (ou Type Constructor - Construtor de Tipos em inglês). Acionando esta função podemos construir um novo ponto:
import Playground exposing (..)
type alias Ponto2D =
{ x : Number
, y : Number
}
posicao = Ponto2D 10 20
main =
picture
[ circuloVerde posicao
]
circuloVerde {x, y} =
circle green 50
|> move x y
Neste exemplo a função circuloVerde continua recebendo um Record de forma mais simples, usando as chaves. Mas podemos ir além e dar um mome para este parâmetro:
import Playground exposing (..)
type alias Ponto2D =
{ x : Number
, y : Number
}
posicao = Ponto2D 10 20
main =
picture
[ circuloVerde posicao
]
circuloVerde ponto =
circle green 50
|> move ponto.x ponto.y
Agora ficou muito claro na nossa função circuloVerde que o parâmetro esperado é um ponto e que este ponto possui dois campos (x e y) e que ambos são números. Para acessar estes campos utilizamos o símbolo de ponto final. Logo, para acessar o campo x basta digitar ponto.x.
Conclusão
É provável que você esteja se perguntando o por que disso tudo! Esta nova versão do nosso código é maior e talvez um pouco mais confusa. E eu diria que... você está certa! Neste exemplo, complicamos uma solução que era simples e isso não é uma boa prática. Mas precisei fazer isso para explicar os conceitos pra você. Em outras situações o uso de Records irá simplificar muito o código. Por isso é muito importante entender este conceito.
E agora?
Esta aula foi bastante teórica, então chegou a hora de você colocar as mãos na massa e praticar mais um pouco!
Siga para os desafios da Aula 9 e bons estudos.