Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Metaprogramming

Erlang e Elixir, Parte 4: Fluxo de Controle

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Introduction to Erlang and Elixir.
Erlang and Elixir, Part 3: Functions
Erlang and Elixir, Part 5: Phoenix Framework

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

If, else e operadores lógicos são, provavelmente, as maiores semelhanças entre as linguagens populares e sem supresa Elixir as tem, também. As macros if, case e cond permitem-nos controlar a estrutura de fluxo.

Para combinar padrões, dissemos que usar case provê combinações garantidas para qualquer padrão iterativamente:

Vale notar o caso _, que é o caso padrão. Esse caso também pode ser usado com um atom ou qualquer tipo de variável, dessa forma:

Expressões de Guarda

Elixir provê vários operadores para verificar em nossa expressão como um guarda buscando dados errados. Por padrão, o seguinte é suportado:

  • operadores de comparação (==!====!==>>=<<=)
  • operadores booleanos (and, or, not)
  • operações aritiméticas (=, -, *, /)
  • operadores unários aritimétidos (+, -)
  • o operador de concatenação binária (<>)
  • o in desde que o lado direito seja uma série ou lista
  • Todas as funções de checagem de tipo a seguir:
    • is_atom/1
    • is_binary/1
    • is_bitstring/1
    • is_boolean/1
    • is_float/1
    • is_function/1
    • is_function/2
    • is_integer/1
    • is_list/1
    • is_map/1
    • is_nil/1
    • is_number/1
    • is_pid/1
    • is_port/1
    • is_reference/1
    • is_tuple/1
  • Além dessas funções:
    • abs(number)
    • binary_part(binary, start, length)
    • bit_size(bitstring)
    • byte_size(bitstring)
    • div(integer, integer)
    • elem(tuple, n)
    • hd(list)
    • length(list)
    • map_size(map)
    • node()
    • node(pid | ref | port)
    • rem(integer, integer)
    • round(number)
    • self()
    • tl(list)
    • trunc(number)
    • tuple_size(tuple)

Podemos usá-los, assim:

Além disso, funções anônimas podem ter vários guardas. Por exemplo, para calcular o eixo fixo de um dado de mercado financeiro com valores alto, baixo e próximo, fazemo assim:

Aqui, se o valor alto é menor que o baixo, a função anônima pivô retornará uma mensagem de Erro. Esse jeito de criar guardas em uma linha é muito poderoso.

Cond

Como a declaração switch, cond de Elixir é onde podemos aplicar um texto de bloco if else e executar na combinação.

No bloco de cond, tudo é avaliado como true, exceto nil ou false. Todos os números e cadeias de caracteres inclusos.

Por exemplo, podemos verificar o estado atual para várias possibilidade com um bloco cond:

Quando o valor do estado é um texto, ele será avaliado, caso contrário, uma mensagem de erro será retornada por padrão através do último caso, true.

If e Unless

Elixir também provê-nos o unless, que é parte padrão do bloco if else e pode ser demonstrado assim:

Quando if retorna true, unless retornará o contrário. Como demonstrado, podemos ter o outro lado do condicional, dessa forma.

Em exemplo real, isso pode ser usado para mostrar informação condicional durante verificação, como um lembrete ou dica.

Blocks Do/End

Pelos exemplo, vimos o uso das macros do e end. Vejamos mais de perto agora, antes de terminar essa seção:

A vírgul a após true é uma sintaxe regular para Elixir, onde cada argumento é separado por vírgula. A sintaxe usar listas de palavras-chave e quando usada juntas da macro else, ficará assim:

Para ficar melhor, podemos usar blocos do/end sem virgulas vírgulas para abordagem diretas:

Conclusão

Elixir tem estruturas de controle familiares, como if/else e case, mas também tem unless e blocos do/end.

Obtemos qualquer lógica através da manipulação do fluxo de controle com essas estruturas. Ao usá-las junto de macros, funções anônimas e módulos, temos um grande arsenal de opções para realizar o trabalho.

Para leitura continuada do tópico, o manual provê mais conteúdo sobre ressalvas do uso do bloco do/end, como limitações de escopo de funções.

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.