Conceitos fundamentais de ERLANG – Parte 2 de 3

Posted on 09/08/2011 by

1


Olá pessoal, tudo certo?

Esse é o segundo post de uma pequena série sobre os conceitos fundamentais de Erlang. No primeiro post falei sobre as razões para aprender Erlang. Além disso, falei sobre como  instalar e fazer algumas brincadeiras.

No post de hoje, mostro como trabalhar com condicionais, criar funções anônimas, utilizar funções para manipulação de listas e, por fim, construir listas sofisticadas.

Deixei para o terceiro e último post o tema concorrência.

Condicionais

Em Erlang, todas as expressões devem retornar um resultado, inclusive condicionais.

Case

Repare a condição abaixo:

p01

A sintaxe é bem óbvia.

  • Começamos a expressão com um case of
  • Para cada valor que desejamos testar, usamos notação –> resultado;
  • Encerramos o case com um end.

Considere agora o seguinte exemplo:

p2

O que ocorreu?! Não havia nenhum padrão compatível com o valor da variável. Em Erlang toda expressão case deve ter pelo menos uma alternativa compatível.

Felizmente, há um operador coringa que aceita “qualquer valor”.

p3 

Problema resolvido! O _ indica “qualquer coisa".

If

Agora que já sabemos utilizar o case, podemos utilizar o if. A sintaxe básica prevê que, no lugar de informar um valor “candidato” (pattern), informamos um “guard “ (condição).

Observe que, novamente, temos que ter sempre pelo menos um guard resultando em verdadeiro.

p4

Funções anônimas

No post anterior, mostrei como construir uma função em Erlang. Entretanto, é bom deixar claro que também é possível criar funções anônimas (semelhantes a expressões lambda do C#). Observe:

p5

A sintaxe básica é fun( end.

Como podemos ver no exemplo, uma função anônima pode ser armazenada em uma variável. Um outro exemplo:

image

Manipulação avançada de listas

Como ocorre em toda linguagem funcional avançada, Erlang oferece um rico conjunto de funções para manipulação de listas.

As funções estão disponíveis no módulo lists. Para listar, basta digitar lists:

p6

Os nomes das funções são suficientes para entender o que fazem. Mesmo assim, você pode obter uma ajuda mais avançada na página de documentação do Erlang.

Apenas para apresentar algumas possibilidades. Considere:

p8

 

Aqui, combinei a utilização da função lists:foreach com io:format (semelhante a String.Format do C#, porém, com outros escapes). Para saber mais sobre io:format, consulte aqui.

Uma outra possibilidade, brincando com a função map e uma função anônima.

p9

Um último exemplo…

p10

Repare que os métodos any e all são testes de “compatibilidade”.

Geração avançada de listas (notação “tal que”)

Para encerrar o post de hoje, gostaria de mostrar uma forma mais poderosa para gerar listas. Observe:

p11

Repare [item || [, ]]. Chamo essa notação de “tal que”.

Acho que é suficiente.

Por hoje, era isso.

Smiley piscando

Posted in: Erlang