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:
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:
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”.
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.
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:
A sintaxe básica é fun(
Como podemos ver no exemplo, uma função anônima pode ser armazenada em uma variável. Um outro exemplo:
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:
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:
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.
Um último exemplo…
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:
Repare [item ||
Acho que é suficiente.
Por hoje, era isso.
Daniel Moreira Yokoyama
26/08/2011
Bela série pra variar.
Linguagens funcionais (puras ou não) ainda são um mistério pra mim. Mas também nunca me dediquei em entendê-las melhor.
Agora que baixei o Erlang, não tenho mais desculpas para não dar alguma atenção a elas.
Já fucei no F#… mas nunca me aprofundei muito.