Fork me on GitHub

Elixir embutido (EEx)

Some contents of this translation may be outdated.
Several major changes were applied to the original lesson since the last update.

Do mesmo jeito que Ruby possui ERB e Java JSPs, Elixir tem EEx ou Embedded Elixir (Elixir embutido). Com EEx podemos embutir e avaliar código Elixir dentro das strings.

Sumário

API

A API EEX suporta trabalhar com cadeias de caracteres e arquivos directamente. A API está dividida em três componentes principais: avaliação simples, definicações de funções, e complilação para AST.

Avaliação

Usando eval_string/3 e eval_file/2 podemos realizar uma simples avaliação sobre uma string ou conteúdos de um arquivo. Este é a API mais simples mas lento uma vez que o código é interpretado e não compilado.

iex> EEx.eval_string "Hi, <%= name %>", [name: "Sean"]
"Hi, Sean"

Definições

A mais rápida e preferida forma de usar o EEx é embutir nosso template dentro de um módulo assim ele pode ser compilado. Para isso precisamos do nosso template no momento da compilação e dos macros function_from_string/5 e function_from_file/5.

Vamos nover nossa saudação para outro arquivo e gerar uma função para nosso template:

# greeting.eex
Hi, <%= name %>

defmodule Example do
  require EEx
  EEx.function_from_file :def, :greeting, "greeting.eex", [:name]
end

iex> Example.greeting("Sean")
"Hi, Sean"

Compilação

Por último, EEx fornece-nos uma forma para directamente gerar Elixir AST a partir de uma cadeia de caracteres usando compile_string/2 ou compile_file/2. Esta API é usada principalmente pelas APIs acima mencionadas, mas está disponível caso deseje implementar seu próprio tratamento de Elixir embutido.

Etiquetas

Por padrão, existem três etiquetas (tags) suportadas no EEx:

<% expressão Elixir - alinhado com a saída %>
<%= expressão Elixir - substitui com o resultado %>
<%% EEx quotation - retorna o contéudo do seu interior %>
<%# Comentários - são ignorados no código fonte %>

Todas expressões que desejamos imprimir devem usar o sinal de igualidade (=). É importante notar que enquanto outras linguagens de templates tratam cláusulas tipo if de forma especial, EEx não faz isso. Sem = nada será impresso:

<%= if true do %>
  A truthful statement
<% else %>
  A false statement
<% end %>

Motor

Por padrão Elixir usa EEx.SmartEngine que inclui suporte atribuições (como @name):ike @name):

iex> EEx.eval_string "Hi, <%= @name %>", assigns: [name: "Sean"]
"Hi, Sean"

As atribuições EEx.SmartEngine são úteis porque atribuições podem ser mudadas sem a necessidade de compilar o template:

Interessado em escrever o seu próprio motor? Confira o procedimento EEx.Engine para ver o que é necessário.


Contributors

loading...



Compartilhe essa página