Começando no Erlang
julho 18, 2008 2 Comentários
Olá, sou o mais novo membro do Pognation (vulgo blog do Stallone xD) e vou começar a postar sobre minhas experiências malucas com linguagens, começando com ERLANG.
Segundo o sagrado Wikipedia, Erlang é uma linguagem de programação concorrente e funcional, dinâmicamente tipada. Originalmente desenvolvida pela Ericsson, liberada como opensource em 1998.
O paradigma funcional (Haskell, OCaml, F#, só para citar alguns outros exemplos) é difícil de “digerir” para o desenvolvedor acostumado somente com Orientação a Objetos (no meu caso, Delphi, Ruby, C#, Java, Python). Mas como acredito que aprender uma linguagem nova me torna melhor em outras (know your enemy! Brincadeirinha ^^), vamos matar esse leão!
Ah, estou no Archlinux, então se virem para instalar o Erlang em suas distros favoritas :P
01 – Instaladno o Erlang
# pacman -S erlang
Assim teremos o ambiente Erlang instalado e sua shell, o erl.
Abra a shell do Erlang:
$ erl
<em>Erlang (BEAM) emulator version 5.6.3 [smp:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.3 (abort with ^G)
1>
Vamos brincar com a calculadora:
1> 4*4.
<em>16
2>
OBS.: Nunca se esqueça do ponto(.) no final da expressão!
Ficar mofando no shell é maçante, então vamos criar um programa de exemplo (feche o erl com CTRL + C, depois A):
Abra seu editor favorito e crie o arquivo exemplo.erl com este conteúdo:
-module(exemplo).
-export([double/1]).
double(X) -> 2*X.
Programação funcional é meio estranha, mas não é difícil entender que este programa dobra o valor de um número.
Agora abra o erl novamente, na mesma pasta do programa de teste e compile-o:
1> c(exemplo).
<em>{ok,exemplo}
E agora veja o resultado chamando o nosso “programa”:
2> exemplo:double(10).
<em>20
3>
Agora vamos explicar algumas coisas neste programa:
-module(exemplo).
Programas Erlang são criados em arquivos de texto com a extensão .erl, e o nome do arquivo deve ser igual ao nome do módulo(uma convenção semelhante ao Java). Quando usamos uma função em outro módulo, a sintaxe padrão é nome_do_módulo:nome_da_função(argumentos). Por isso temos:
2> exemplo:double(10).
A segunda linha do programa nos informa que o módulo exemplo contém uma função chamada double que recebe um argumento(X em nosso exemplo) e que esta função pode ser chamada fora do módulo exemplo(algo como encapsulamento público):
-export([double/1]).
Tudo bem até aqui, certo? Respirem fundo para o exemplo clássico de programa que calcula o fatorial de um número:
fatorial.erl
<em>-module(fatorial).
-export([fac/1]).
fac(1) -> 1;
fac(N) -> N * fac(N - 1).
Compile o programa no erl:
1> c(fatorial).
<em>{ok,fatorial}
E faça um teste calculando o fatorial de 4:
2> fatorial:fac(4).
<em>24
Agora vamos às explicações:
A primeira linha de código da função:
fac(1) -> 1;
Nos diz que o fatorial de 1 é 1, e o “;” indica que há mais “exemplos” desta função.
Na segunda e última linha:
fac(N) -> N * fac(N-1).
Utilizamos a recursividade para calcular o fatorial do argumento que será passado à função, aliás, acostumem-se com isso, pois loops são todos feitos assim no Erlang! *head explodes*
Esse foi o primeiro de uma série de posts sobre minhas aventuras no paradigma funcional, estou aprendendo ainda, mas espero poder dividir isto com a galera esperta que frequenta o blog :)