DEV Community

Cover image for Criando seu primeiro módulo Erlang
Elixir UTFPR (por Adolfo Neto)
Elixir UTFPR (por Adolfo Neto)

Posted on

Criando seu primeiro módulo Erlang

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 /2faz 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).
Enter fullscreen mode Exit fullscreen mode

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).
Enter fullscreen mode Exit fullscreen mode

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>  
Enter fullscreen mode Exit fullscreen mode

No shell, carregue o módulo obesity digitando c(obesity).:

1> c(obesity).
{ok,obesity}
Enter fullscreen mode Exit fullscreen mode

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}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

Alt Text

Que achou? O que você gostaria de aprender a fazer com Erlang?

Top comments (2)

Collapse
 
wlsf profile image
Willian Frantz

A escrita de código em Erlang tem seu charme! Parabéns por estar tomando essa iniciativa de falar mais sobre Erlang, estou adorando!

Collapse
 
elixir_utfpr profile image
Elixir UTFPR (por Adolfo Neto)

Obrigado!