Advertisement
  1. Code
  2. Elixir

Erlang e Elixir, Parte 3: Funções

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Introduction to Erlang and Elixir.
Erlang and Elixir, Part 2: Data Types
Erlang and Elixir, Part 4: Control Flow

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Elixis é feita em Erlang, e tanto na Erlando quanto na Elixir, uma função não é identificada apenas pelo seu nome, mas nome e aridade. Lembre-se: Tudo em Elixir é uma expressão.

Para dar um bom exemplo disso, temos quatro funções, mas todas definidas com aridades diferentes.

Para prover uma forma concisa de trabalho com dados, podemos usar expressões de proteção assim:

Expressões de guarda como when is_binary(a) nos permitem verificar o tipo correto antes de realizar uma operação.

Diferente de Erlang, Elixir permite valores padrões nas funções pelo uso da sintaxe \\, assim:

Funções Anônimas

Na parte anterior, discutimos funções anônimas rapidamente como um tipo de dado. Para aprofundar, vejamos o exemplo:

Vejamos essa poderosa abreviação na primeira linha fn(a, b) -> a + b end. Com isso, podemos produsir uma operação básica sum.(4,3) e ter o retorno em duas linhas de código.

Agora, olhando para o método da potênca, fn(x) -> x * x end, dá para ser mais simples? Trabalhando com map, podemos usar essa função anônima por todo o mapa—de novo, em apenas duas linhas de código!

Combinação de Padrão

Aritimética é muito legal e bom, mas vejamos o que podemos fazer com texto.

Aqui, com combinação de padrão, definimos vários resultados no controle de fluxo, de novo, com pouco código. A sintaxe da Elixir é rápida de trabalhar e muito poderos, como já veremos no próximo exemplo.

Funções de Primeira-Classe

As funções anônimas que cobrimos são valores de primeira-classe. Isso é, podem ser passadas como argumentos para outras funções e também servir de retorno. Há uma sintaxe especial para trabalhar com funções nomeadas da mesma forma:

Aqui definimos um módulo Math com defmodule e criamos a função square. Então, podemos usar isso com conjunto ao método map de antes. Usamos o mesmo operador &, permitindo passar nossa função Math.square/1 para receber o valor do mapa e retornar o quadrado de cada item da lista.

É muito poder para uma única linha. Referimo-nos a isso como captura parcial de função em Elixir.

Controle de Fluxo

Usamos os construtos if e case para controlar fluxo em Elixir. Como tudo em Elixir, if e case são expressões.

Para combinação de padrões, usamos case:

E para comparação lógica, usamos if:

Para facilitar, Elixir também provê uma função if que lembra a de outras linguagens e é útil quando precisamos verificar se algo é verdadeiro ou falso.

Funções Dinâmicas

Isso é possível em Elixir pelo uso do método unquote de antes. Por exemplo, para verificar alguns Admins fixados no sistema, podemos fazer o seguinte:

Aqui criamos os métodos Admins.check_manager e Admins.check_super dos nomes dos átomos.

Conclusão

Tudo é uma expressão em Elixir e isso significa que podemos ter muito poder usando pouquíssimo código.

Para nós, Elixir para com CoffeeScript, Ruby, Python ou outra de sintaxe minimalista já que a forma é direta ao ponto, mas é bem mais poderosa que essas outras pelo seu aspecto de meta-programação.

No próximo artigo, veremos como usar controle de fluxo e funções para criar interatividade no app.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.