Índice

Como eu tinha prometido, agora vou mostrar um pouco da estrutura dos códigos Erlang, começando pelos principais tipos de dados.

Antes de começar, gostaria que todos vissem esse vídeo que eu achei (muito interessante!):

Capítulo II

I. Tipos de dados

Em Erlang, qualquer tipo de dado é chamado de Termo.

Vejamos então os termos em Erlang:

  • Números

Existem 2 tipos de números em Erlang: Inteiro e Ponto Flutuante, e além da notação convencional: 1, 2.5, existem mais 2 tipos de notação: $char e base#value.

O $char retorna a posição do char na tabela ASCII, exemplo:

$A é igual a 65

Enquanto o base#value, é o resultado do valor sobre a base especificada, por exemplo, se quiser saber o valor decimal de FF sobre a base 16 (hexadecimal), você pode fazer:

16#FF é igual a 255
  • Strings

Strings são fechadas entre aspas duplas (“), mas elas propriamente ditas não são um tipo de dado em Erlang. Huh?

Sim, strings em Erlang nada mais são que uma lista de números contendo cada posição dos caracteres na tabela ASCII, ou seja, quando você usa:

X = "ola".

Na verdade esta fazendo a mesma coisa que:

X = [$o, $l, $a].

Que consequentemente torna-se [111, 108, 97]. Pois 111 é a posição do “o” na tabela ASCII, assim como 108 e 97 são as posições de “l” e “a“.

  • Átomos

Não confunda com os átomos de química. Um átomo, é um tipo bem interessante em Erlang, assemelha-se aos símbolos do Ruby, mas a sua utilidade é um pouco diferente, veremos a frente como os átomos podem nos ajudar na construção de nossos programas.

Aspas simples podem ser utilizadas para criar átomos em Erlang. Note que átomos podem ser construídos sem aspas simples, quando eles iniciam em letras minúsculas e contém somente caracteres alfa-numéricos, incluindo @ e _.

Exemplos de átomos:

numero
numero_telefone
'Numero'
'numero telefone'
  • Binários

Erlang possui suporte nativo a binários.

Binario = <<"abc">>.
<<V1:8, V2:16>> = Binario.
V1.
<<V3:8, V4:8>> = <<V2:16>>.
V3.
V4.

Compreendendo o exemplo:

O que o trecho de código acima faz, basicamente é, criar uma variável contendo um binário de 3 caracteres “a”, “b”, e “c”, ou seja, 24 bits. Atribuindo os 8 primeiros bits da variável Binario à variável V1 (agora contendo “a”) e os outros 16 bits à variável V2 (agora contendo “bc”). Após isso ele imprime V1 e cria mais duas variáveis: V3 e V4, contendo os outros 16 bits da variável Binario, 8 bits pra cada, ficando assim V3 com “b”, e V4 com “c”. Após isso, imprime V3 e V4.

Note que se você tentar executar o código acima, na hora de imprimir as variáveis V1, V3 e V4, serão impressos números, que são os referentes a cada letra na tabela ASCII, ao invés de imprimir a letra. Isso é uma característica de Erlang. Já expliquei isso no tópico Strings, veja lá novamente, caso tenha alguma dúvida.

Não entendeu o trecho de código? Não se preocupe, foi só um exemplo, e com o passar dos artigos você vai acabar compreendendo melhor o código.

  • Fun

Fun é um objeto funcional, também pode ser reconhecido como uma função anônima. Um exemplo básico de um objeto Fun é:

Dobro = fun(X) -> X * 2 end.

Onde Dobro(2) imprimirá 4, e Dobro(3) imprimirá 6.

  • Tuplas

Tuplas em Erlang servem para formar um tipo de dado que é formado por um conjunto de termos. Cada termo dentro de uma tupla é chamado de elemento. Por exemplo:

{centimetros, 10}.
{metros, 10}.

Aí esta uma das funcionalidades dos átomos, criamos duas tuplas, cada uma com 2 elementos. Uma contendo “10 centímetros” e outra contendo “10 metros”. Interessante não?

Tuplas também podem conter outras tuplas:

{"Fulano", 18, {agosto, 4}}.

Onde Fulano é o primeiro elemento da tupla e refere-se ao nome de uma pessoa (string), 18 é a idade (número), agosto é o mês de nascimento (átomo) e 4 é o dia (número).

  • Listas

Listas em Erlang lembram os vetores (arrays) de outras linguagens. Em uma lista, você pode ter qualquer tipo de dado, inclusive tuplas e outras listas.

[1, 2, [1, 2]].

Uma lista pode ser vazia ([]), ou conter um Head (cabeça) e um Tail (rabo). Aqui vou utilizar os termos Head e Tail pois ficará mais fácil para futuros estudos, já que são os termos mais utilizados.

Uma lista com Head e Tail, basicamente seria assim:

[1, 2, 3].

Onde 1 é o Head, e [2, 3] o Tail.

E pra quê isso?

Imagine que você quer caminhar por uma lista imprimindo cada elemento, você cria uma função recebendo a lista, imprime o Head e repassa o Tail para essa mesma função, realizando assim o que chamamos de recursividade, vejamos:

passar_por_lista([H | T]) ->
	H.
	passar_por_lista(T).

No exemplo acima, criamos a função passar_por_lista que recebe uma lista como parâmetro, ou melhor dizendo, recebe o H (Head, cabeça) dessa lista, e o T (Tail, rabo). Em seguinda, imprime o Head, e passa o Tail para a mesma função.

Não tente executar o trecho de código acima, ainda, pois falta algumas coisas para vermos mais à frente (próxima parte).

  • Boleano

Boleanos (TRUE e FALSE), em Erlang, nada mais são que átomos (viu como eles são úteis?). Quando realizada a operação 1 < 2, é retornado um átomo chamado true. Assim como 1 > 2 retorna um átomo false.

  • Record

Um Record é uma estrutura de dados para armazenamento de um número fixo de elementos. É composto de campos nomeados, e lembra o struct da linguagem C.

O Record não é um tipo de dado verdadeiro, na verdade, na hora da compilação ele é transformado em tuplas. Sendo assim, os Record’s não podem ser testados através da shell (erl), pois só existem para o compilador. Então para testa-los é necessário criar um arquivo e compila-lo.

Um exemplo básico de Record (não deve ser compilado) é o abaixo:

% pessoa, nome e idade são átomos
-record(pessoa, {nome, idade}).

% Nome e Idade são variáveis
new(Nome, Idade) ->
	% name é átomo, Name se refere à variável
	% idade é átomo, Idade se refere à variável
	#pessoa{name=Name, idade=Idade}.

Caso compilássemos, poderiamos utilizar o Record da seguinte forma na shell:

pessoa:new(fulano, 44).

E ele retornaria à nós uma tupla:

{pessoa, fulano, 44}.

Conclusão

Bom, realmente essa parte foi um pouco cansativa de fazer, mas o aprendizado vale a pena. Agora vou descansar um pouco, ler mais sobre Erlang depois e começar a escrever a Parte 4.

Espero que tenha sido esclarecedor até aqui, caso tenha cometido algum erro, ou tenha alguma parte que esteja difícil entender, por favor, comentem. Prometo que tento melhorar “a coisa”. :)

Este documento esta sob licença GFDL – GNU Free Documentation License. Saiba mais.