Aula 4 - Criando funções.
Esta aula será mais teórica, mas o que irá 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 suas próprias funções?
- Vantagens de criar funções
1- O que é uma função?
Conforme seu 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 desenhou um ônibus
no desafio da aula 2, quanto mais detalhes
colocava 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. Cada
paradigma tem suas vantagens e desvantagens. Neste curso,
você aprenderá o paradigma funcional.
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 para z.
1.2 Funções na programação
Em programação (em especial em linguagens funcionais,
como Elm ou Haskell),
o conceito de funçã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 muito confuso? Não se preocupe, vai ficar mais fácil de entender com o exemplo a seguir.
2- Como criar suas 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 definir uma nova função, basta dar um
nome para ela (uma palavra qualquer, neste caso,
folhas) e em seguida colocar o simbolo =, da mesma forma
que na matemática.
Tudo que estiver depois do símbolo de igual
fará parte da nossa nova função.
Uma vez definida, você pode 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.
🚨 Atenção: 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 você pode separar também 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 na função folhas. E o mesmo para a palavra tronco.
E você pode dar um passo além, se quiser, 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 suas 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 está
tentando desenhar.
Outra grande vantagem de programar assim é que
agora o tronco e folhas estão desacoplados.
Você pode, por exemplo, reutilizar a função tronco
para desenhar outros tipos de árvores ou criar
um novo tipo de tronco e reaproveitar as folhas.
👩🏫 Dica: 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.