80 lines
3.0 KiB
Markdown
80 lines
3.0 KiB
Markdown
|
---
|
|||
|
title: Erlang
|
|||
|
localeTitle: Erlang
|
|||
|
---
|
|||
|
## Erlang
|
|||
|
|
|||
|
Erlang é uma linguagem de programação funcional, desenvolvida pela Ericsson para uso em aplicações de telecomunicações. Por acharem que é inaceitável que um sistema de telecomunicações tenha algum tempo de inatividade significativo, o Erlang foi construído para ser (entre outras coisas):
|
|||
|
|
|||
|
* distribuído e tolerante a falhas _(um software ou hardware com falha não deve desativar o sistema)_
|
|||
|
* concorrente _(pode gerar muitos processos, cada um executando um trabalho pequeno e bem definido, e isolados uns dos outros, mas capazes de se comunicar via mensagens)_
|
|||
|
* hot-swappable _(o código pode ser trocado no sistema durante a execução, levando a alta disponibilidade e tempo de inatividade mínimo do sistema)_
|
|||
|
|
|||
|
### Sintaxe
|
|||
|
|
|||
|
Erlang faz uso pesado de **recursão** . Como os dados são imutáveis em Erlang, o uso de loops `while` e `for` (onde uma variável precisa continuar mudando seu valor) não é permitido.
|
|||
|
|
|||
|
Aqui está um exemplo de recursão, mostrando como uma função tira repetidamente a primeira letra da frente de um nome e a imprime, parando apenas quando a última letra é encontrada.
|
|||
|
|
|||
|
```erlang
|
|||
|
-module(name).
|
|||
|
|
|||
|
-export([print_name/1]).
|
|||
|
|
|||
|
print_name([RemainingLetter | []]) ->
|
|||
|
io:format("~c~n", [RemainingLetter]);
|
|||
|
print_name([FirstLetter | RestOfName]) ->
|
|||
|
io:format("~c~n", [FirstLetter]),
|
|||
|
print_name(RestOfName).
|
|||
|
```
|
|||
|
|
|||
|
Saída:
|
|||
|
```
|
|||
|
> name:print_name("Mike").
|
|||
|
M
|
|||
|
i
|
|||
|
k
|
|||
|
e
|
|||
|
ok
|
|||
|
```
|
|||
|
|
|||
|
Há também uma forte ênfase na **correspondência de padrões** , que freqüentemente elimina a necessidade de uma estrutura `if` ou declaração de `case` . No exemplo a seguir, há duas correspondências para nomes específicos, seguidas por um pega-tudo para quaisquer outros nomes.
|
|||
|
|
|||
|
```erlang
|
|||
|
-module(greeting).
|
|||
|
|
|||
|
-export([say_hello/1]).
|
|||
|
|
|||
|
say_hello("Mary") ->
|
|||
|
"Welcome back Mary!";
|
|||
|
say_hello("Tom") ->
|
|||
|
"Howdy Tom.";
|
|||
|
say_hello(Name) ->
|
|||
|
"Hello " ++ Name ++ ".".
|
|||
|
```
|
|||
|
|
|||
|
Saída:
|
|||
|
```
|
|||
|
> greeting:say_hello("Mary").
|
|||
|
"Welcome back Mary!"
|
|||
|
> greeting:say_hello("Tom").
|
|||
|
"Howdy Tom."
|
|||
|
> greeting:say_hello("Beth").
|
|||
|
"Hello Beth."
|
|||
|
```
|
|||
|
|
|||
|
### Experimente
|
|||
|
|
|||
|
Existem sites onde você pode tentar executar comandos Erlang sem ter que instalar nada localmente, como estes:
|
|||
|
|
|||
|
* [De uma chance! (um tutorial prático)](http://www.tryerlang.org/)
|
|||
|
* [Tutoriais](https://www.tutorialspoint.com/compile_erlang_online.php)
|
|||
|
|
|||
|
Se você gostaria de instalá-lo em sua máquina (ou virtual), você pode encontrar arquivos de instalação em [Erlang.org](https://www.erlang.org/downloads) ou em [Erlang Solutions](https://www.erlang-solutions.com/resources/download.html) .
|
|||
|
|
|||
|
#### Mais Informações:
|
|||
|
|
|||
|
* [Sobre o Erlang](https://www.erlang.org/about)
|
|||
|
* [Aprenda-lhe alguns Erlang para o bem grande!](http://learnyousomeerlang.com/)
|
|||
|
* [Abrigo Desovado!](http://spawnedshelter.com/) _(uma coleção de artigos, vídeos e livros para aprender Erlang)_
|
|||
|
* [Erlang (linguagem de programação)](https://en.wikipedia.org/wiki/Erlang_(programming_language))
|