Oi, pessoas programadoras!
Ontem falei sobre Erlang e hoje eu vou ensinar como criar seu primeiro módulo em Erlang.
E o que é um módulo? É um conjunto de funções. OK, e o que é uma função? Uma função é um trecho de código, com um nome, que recebe zero ou mais argumentos e retorna um valor. Muito abstrato? Vamos a um exemplo.
A obesidade é um problema de saúde muito sério. Uma das formas de dizer se uma pessoa está obesa ou não é calculando seu Índice de Massa Corpórea (IMC). O cálculo é feito da seguinte forma:
- entrada: peso (em quilogramas) e altura (em metros)
- saída: um número real, normalmente superior a 15.
O cálculo é feito da seguinte forma: divide-se peso pelo quadrado da altura.
Antes uma observação: eu vou escrever os nomes de módulos, funções e variáveis em inglês. O nome do módulo vai ser obesity
, que é obesidade em inglês. E o nome da função vai ser calculate_bmi/2
, onde BMI é abreviação de body mass index, que é índice de massa corpórea em inglês. E este /2
? Este /2
faz parte do nome da função e diz que a função recebe dois argumentos. Ou seja: eu posso ter outras funções calculate_bmi
com mais ou menos argumentos do que 2 (nãi veremos isto hoje).
Vamos então criar um arquivo chamado obesity.erl
com o seguinte conteúdo:
-module(obesity).
-export([calculate_bmi/2]).
calculate_bmi(Weight, Height) ->
Weight / (Height * Height).
A linha "-module(obesity).
" diz que o nome do módulo é obesity
.
A linha "-export([calculate_bmi/2]).
" diz que o módulo obesity
exporta a função calculate_bmi/2
.
As linhas:
calculate_bmi(Weight, Height) ->
Weight / (Height * Height).
definem a função calculate_bmi
que recebe os argumento Weight
e Height
. Weight é peso em inglês, Height é altura em inglês. E a expressão Weight / (Height * Height)
apenas faz o que dissemos acima: divide peso pelo quadrado da altura. Atenção para os pontos no fim de cada comando e para a letra inicial maiúscula nos nomes dos argumentos.
OK, salve o arquivo e abra um shell de Erlang (erl) na pasta onde está seu arquivo:
$ erl
Erlang/OTP 23 [erts-11.1.1] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]
Eshell V11.1.1 (abort with ^G)
1>
No shell, carregue o módulo obesity
digitando c(obesity).
:
1> c(obesity).
{ok,obesity}
Observe o retorno da função c/1
: {ok,obesity}
. Aqui, ok
e obesity
são átomos e {ok,obesity}
é uma tupla contendo estes dois átomos. Esta tupla informa que deu tudo certo com o carregamento do módulo obesity
. Se o nome de módulo passado não existisse, c/1
retornaria um erro, como aqui:
2> c(blablabla).
{error,non_existing}
Como chamo a função calculate_bmi/2
? No erl digite o nome do módulo, seguido de dois pontos (:), seguido do nome da função e, entre parênteses, os valores passados como argumentos. Não esqueça do ponto final!
3> obesity:calculate_bmi(80, 1.75).
26.122448979591837
Funcionou. O IMC de uma pessoa que pesa 80Kg e mede 1,75m de altura é 26,122448979591837. Repare na questão de que nós, no Brasil, separamos casas decimais com vírgulas. Em vários outros países, a separação é com ponto.
Para sair do erl, basta digitar Control-C duas vezes.
Que achou? O que você gostaria de aprender a fazer com Erlang?
Top comments (2)
A escrita de código em Erlang tem seu charme! Parabéns por estar tomando essa iniciativa de falar mais sobre Erlang, estou adorando!
Obrigado!