DEV Community

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

Posted on

5 1

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?

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

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!

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay