Aula 4 - Criando funções.
Esta aula será mais teórica, mas o que vamos aprender hoje é fundamental para entender todo o resto que está por vir. Então, bora entender o que é uma função?
O que você irá aprender nesta aula?
- O que é uma funcão?
1.1 Funções matemáticas
1.2 Funções na programação - Como criar nossas próprias funções?
- Vantagens de criar funções
1- O que é uma função?
Conforme nosso código cresce, vai ficando cada
vez mais difícil identificar o que significa
cada uma de suas partes.
Por exemplo: no código que desenhamos um ônibus
no desafio da aula 2, quanto mais detalhes
colocávamos no desenho, maior
ficava o main.
Mas afinal, o que é esse main? Ela é uma função.
Na linguagem de programação Elm, quase tudo
que escrevemos são funcões! Isso por que ela é uma
linguagem que segue o paradigma funcional. Existem
vários tipos (paradigmas) de linguagens: Orientadas à Objetos,
Imperativas, Lógicas e também as Funcionais.
1.1- Funções matemáticas
Provavelmente você já deve ter ouvindo falar em funções nas aulas de matemáticas na escola. Coisas como:
x = y + 2
Mas o que significa x = y + 2? Essencialmente significa que em qualquer lugar que tiver o simbolo x, podemos substitui-lo por y + 2, e vice versa. Por exemplo, se tivermos o seguinte conjunto de equações:
x = 5
y = 10
z = x + y
Para descobrirmos o valor de z, substituímos o valor de y e em seguida o de x.
Sendo a função z original:
z = x + y
Podemos primeiro substituir o valor de y:
z = x + 10
E em seguida o valor de x:
z = 5 + 10
Assim chegamos a conclusão que 15 é o único valor possíve de z.
1.2 Funções na programação
Em programação (em especial em linguagens funcionais,
como Elm ou Haskell),
o conceito de funcão é muito parecido.
No nosso exemplo anterior, o valor de z dependia de y e de x.
Podemos fazer algo similar com nossa função main,
tornando-a dependente de outras funções menores e
mais simples. Isso deixa o código muito mais
fácil de compreender e alterar.
Achou confuso? Vai ficar mais fácil de entender com o exemplo a seguir.
2- Como criar nossas próprias funções?
Vamos partir de uma função que desenha uma árvore para então decompô-la em várias funções menores.
Função main original:
import Playground exposing (..)
main =
picture
[ rectangle darkBrown 60 250
|> move 0 -150
, circle green 150
|> move 0 50
]
Podemos decompor nossa árvore colocando a definição de suas folhas em uma outra função:
import Playground exposing (..)
main =
picture
[ rectangle darkBrown 60 250
|> move 0 -150
, folhas
]
folhas =
circle green 150
|> move 0 50
Este novo código é equivalente ao anterior. Apenas extraí parte dela para outra funcão.
Para definirmos uma nova função, basta darmos um
nome para ela (uma palavra qualquer, neste caso,
folhas) seguida do simbolo =, da mesma forma
que na matemática.
Tudo que estiver depois do símbolo de igual
fará parte da nossa nova função.
Mas isso apenas define a função. Precisamos em
seguida utilizá-la em um ou mais lugares
do código.
Para utilizar uma função, assim como na matemática, basta escrever seu nome. No exemplo anterior a função folhas é utilizada como parte da função main.
É muito importante enteder este conceito. Analise com calma o código acima para ter certeza que compreendeu.
Dica: em Elm, a ordem em que as funções são definidas é irrelevante. Você pode definir primeiro a função main e depois a função folhas ou primeiro a função folhas e depois a main.
Agora vamos separar o tronco da árvore em uma outra função:
import Playground exposing (..)
main =
picture
[ tronco
, folhas
]
tronco =
rectangle darkBrown 60 250
|> move 0 -150
folhas =
circle green 150
|> move 0 50
Tente imaginar que a palavra folhas, dentro da função main, será substituida pelo conteúdo definido logo abaixo na função folhas. E o mesmo para a palavra tronco.
E podemos dar um passo além, se quisermos, e criar a função arvore:
import Playground exposing (..)
main =
picture
arvore
arvore =
[ tronco
, folhas
]
tronco =
rectangle darkBrown 60 250
|> move 0 -150
folhas =
circle green 150
|> move 0 50
Neste último exemplo a função arvore retorna uma lista de formas geométricas contendo um tronco e uma folha.
3- Vantagens de criar funções
Existem duas grandes vantagens em dividir
os códigos em várias funções.
A primeira é que torna mais fácil de
expressar nossas intenções. Observe e compare a função
main definida no primeiro e últimos exemplos.
Desta última forma ficou muito mais explícito o que estamos
tentando desenhar.
Outra grande vantagem de programar assim é que
agora o tronco e folhas estão desacoplados.
Posso, por exemplo, reutilizar a função tronco
para desenhar outros tipos de árvores ou criar
um novo tipo de tronco e reaproveitar as folhas.
Em programação este é outro conceito muito importante:
reaproveitamento de códigos.
E agora?
Agora chegou a hora de você colocar as mãos na massa e praticar um pouco!
Siga para os desafios da Aula 4 e bons estudos.