Do you want to pick up from where you left of?
Take me there

Ένθετη Elixir (EEx)

Όπως η Ruby έχει το ERB και η Java τα JSP, η Elixir έχει τα EEx, ή Ένθετη Elixir. Με την EEx μπορούμε να ενσωματώσουμε και τρέξουμε κώδικα Elixir μέσα σε αλφαριθμητικά.

API

Το API της EEx υποστηρίζει την εργασία με αλφαριθμητικά και αρχεία απευθείας. Το API χωρίζεται σε τρία βασικά στοιχεία: απλή αξιολόγηση, ορισμοί συναρτήσεων και σύνταξη σε AST.

Αξιολόγηση

Με τη χρήση των eval_string/3 και eval_file/2 μπορούμε να κάνουμε μια απλή αξιολόγηση σε ενα αλφαριθμητικό ή στα περιεχόμενα ενός αρχείου. Αυτό είναι το πιο απλό API αλλά και το πιο αργό από τη στιγμή που ο κώδικας αξιολογείται και δεν συντάσσεται.

iex> EEx.eval_string "Γειά σου, <%= name %>", [name: "Sean"]
"Γειά σου, Sean"

Ορισμοί

Η γρηγορότερη, και προτιμότερη, μέθοδος χρήσης της EEx είναι να ενσωματώσει το πρότυπο μας σε μια ενότητα ώστε να συνταχθεί. Για αυτό χρειαζόμαστε το πρότυπό μας την ώρα της σύνταξης, μαζί με τις μακροεντολές function_from_string/5 και function_from_file.

Ας μεταφέρουμε τον χαιρετισμό μας σε άλλο αρχείο και ας δημιουργήσουμε μια συνάρτηση για το πρότυπό μας:

# greeting.eex
Γειά σου, <%= name %>

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

iex> Example.greeting("Sean")
"Γειά σου, Sean"

Σύνταξη

Τέλος, η EEx μας παρέχει έναν τρόπο να δημιουργήσουμε απευθείας Elixir AST από ένα αλφαριθμητικό ή αρχείο με τη χρήση των compile_string/2 ή compile_file/2. Αυτό το API χρησιμοποιείται κυρίως από τα προηγούμενα API αλλά είναι διαθέσιμο αν θέλετε να υλοποιήσετε τη δική σας διαχείριση ένθετης Elixir.

Ετικέτες

Εξ ορισμού υπάρχουν τέσσερις υποστηριζόμενες ετικέτες στην EEx:

<% Έκφραση Elixir - στη γραμμή με έξοδο %>
<%= Έκφραση Elixir - αντικατάσταση με αποτέλεσμα %>
<%% Απόσπασμα EEx - επιστρέφει τα περιεχόμενα %>
<%# Σχόλια - απορρίπτονται από το πηγαίο αρχείο %>

Όλες οι εκφράσεις που θέλουν να εκτυπώσουν πρέπει να χρησιμοποιήσουν το σήμα ισότητας (=). Είναι σημαντικό να σημειώσουμε ότι παρόλο που άλλες γλώσσες προτύπων μεταχειρίζεται τις προτάσεις σαν την if με έναν ξεχωριστό τρόπο, η EEx δεν το κάνει. Χωρίς το = τίποτα δεν θα εκτυπωθεί:

<%= if true do %>
  Μια αληθής δήλωση
<% else %>
  Μια ψευδής δήλωση
<% end %>

Μηχανή

Από καθορισμού η Elixir χρησιμοποιεί την EEx.SmartEngine, η οποία περιλαμβάνει υποστήριξη για αναθέσεις (όπως η @name):

iex> EEx.eval_string "Γειά σου, <%= @name %>", assigns: [name: "Sean"]
"Γειά σου, Sean"

Οι αναθέσεις EEx.SmartEngine είναι χρήσιμες επειδή οι αναθέσεις μπορούν να αλλαχθούν χωρίς να χρειαστεί σύνταξη προτύπου.

Ενδιαφέρεστε να γράψετε την δική σας μηχανή; Ελέγξτε την συμπεριφορά της EEx.Engine για να δείτε τι απαιτείται.

Έπιασες λάθος ή θέλεις να συνεισφέρεις στο μάθημα; Επεξεργαστείτε αυτό το μάθημα στο GitHub!