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

Σφραγίδες

Εργασία με τις σφραγίδες και δημιουργία τους.

Επισκόπηση Σφραγίδων

Η Elixir παρέχεια ένα εναλλακτικό συντακτικό για την αναπαράσταση και εργασία με τα κυριολεκτικά. Μια σφραγίδα θα ξεκινήσει με μια περισπωμένη ~ ακολουθούμενη από ένα χαρακτήρα. Ο πυρήνας της Elixir μας παρέχει μερικές προκαθορισμένες σφραγίδες, αλλά είναι πιθανό να δημιουργήσετε τις δικές σας όταν χρειάζεται να επεκτείνετε τη γλώσσα.

Μια λίστα των διαθέσιμων σφραγίδων περιλαμβάνει:

Μια λίστα με διαχωριστικά περιλαμβάνει:

Λίστες Χαρακτήρων

Οι σφραγίδες ~c και ~C δημιουργούν λίστες χαρακτήρων. Για παράδειγμα:

iex> ~c/2 + 7 = #{2 + 7}/
'2 + 7 = 9'

iex> ~C/2 + 7 = #{2 + 7}/
'2 + 7 = \#{2 + 7}'

Μπορούμε να δούμε ότι η σφραγίδα με το μικρό ~c παρεμβάλει τον υπολογισμό, ενώ με το κεφαλαίο ~C όχι. Θα δούμε ότι η αυτές οι αλληλουχίες κεφαλαίων / μικρών είναι συνηθισμένες σε όλες τις προκαθορισμένες σφραγίδες.

Τυπικές Εκφράσεις

Οι σφραγίδες ~r και ~R χρησιμοποιούνται για να αναπαραστήσουν τυπικές εκφράσεις. Τις δημιουργούμε είτε επι τόπου ή για χρήση μέσα στις συναρτήσεις Regex. Για παράδειγμα:

iex> re = ~r/elixir/
~r/elixir/

iex> "Elixir" =~ re
false

iex> "elixir" =~ re
true

Μπορούμε να δούμε ότι στο πρώτο τεστ για ισότητα, ότι το Elixir δεν ταιριάζει με την τυπική έκφραση. Αυτό συμβαίνει γιατί είναι στα κεφαλαία. Επειδή η Elixir υποστηρίζει Τυπικές Εκφράσεις Συμβατές με Perl (Perl Compatible Regular Expressions - PCRE), μπορούμε να προσθέσουμε το i στο τέλος της σφραγίδας για να κλείσουμε την ευαισθησία σε κεφαλαία / μικρά.

iex> re = ~r/elixir/i
~r/elixir/i

iex> "Elixir" =~ re
true

iex> "elixir" =~ re
true

Επιπρόσθετα, η Elixir παρέχει το API Regex το οποίο είναι φτιαγμένο πάνω από τη βιβλιοθήκη τυπικών εκφράσεων της Erlang. Ας χρησιμοποιήσουμε την Regex.split/2 με μια σφραγίδα εκφράσεων:

iex> string = "100_000_000"
"100_000_000"

iex> Regex.split(~r/_/, string)
["100", "000", "000"]

Όπως βλέπουμε, το αλφαριθμητικό "100_000_000" χωρίζεται με βάση την κάτω πάυλα χάρη στη σφραγίδα ~r/_/. Η συνάρτηση Regex.split επιστρέφει μια λίστα.

Αλφαριθμητικά

Οι σφραγίδες ~s και ~S χρησιμοποιούνται για να παράγουν δεδομένα αλφαριθμητικών. Για παράδειγμα:

iex> ~s/η γάτα στο καπέλο στο χαλί/
"η γάτα στο καπέλο στο χαλί"

iex> ~S/η γάτα στο καπέλο στο χαλί/
"η γάτα στο καπέλο στο χαλί"

Όμως σε τι διαφέρουν; Η διαφορά είναι όμοια με αυτή στις σφραγίδες Λιστών Χαρακτήρων που είδαμε. Η απάντηση είναι οι παρεμβάσεις και η χρήση χαρακτήρων διαφυγής. Αν δούμε ένα άλλο παράδειγμα:

iex> ~s/καλώς ήρθατε στο #{String.downcase "ΣΧΟΛΕΊΟ"} της elixir/
"καλώς ήρθατε στο σχολείο της elixir"

iex> ~S/καλώς ήρθατε στο #{String.downcase "ΣΧΟΛΕΊΟ"} της elixir/
"καλώς ήρθατε στο \#{String.downcase \"ΣΧΟΛΕΊΟ\"} της elixir"

Λίστες Λέξεων

Η σφραγίδα λιστών λέξεων μπορεί να φανεί χρήσιμη μερικές φορές. Μπορεί να σώσει χρόνο, χαρακτήρες και ίσως να μειώσει την πολυπλοκότητα μέσα στη βάση κώδικα. Για παράδειγμα:

iex> ~w/αγαπάω το σχολείο της elixir/
["αγαπάω", "το", "σχολείο", "της", "elixir"]

iex> ~W/αγαπάω το σχολείο της elixir/
["αγαπάω", "το", "σχολείο", "της", "elixir"]

Μπορούμε να δούμε πως οτιδήποτε τυπώνουμε μέσα στα διαχωριστικά χωρίζεται από χαρακτήρες κενού σε μια λίστα. Πάντως, δεν υπάρχει διαφορά ανάμεσα στα δύο παραδείγματα. Ξανά, η διαφορά υπάρχει στις παρεμβάσεις και τους χαρακτήρες διαφυγής. Για παράδειγμα:

iex> ~w/αγαπάω το σχολείο της #{'e'}lixir/
["αγαπάω", "το", "σχολείο", "της", "elixir"]

iex> ~W/αγαπάω το σχολείο της #{'e'}lixir/
["αγαπάω", "το", "σχολείο", "της", "\#{'e'}lixir"]

NaiveDateTime

Η NaiveDateTime μπορεί να είναι χρήσιμη για τη γρήγορη δημιουργία μιας δομής που θα αναπαριστά μια DateTime χωρίς ζώνη ώρας.

Κατά κύριο λόγο, θα πρέπει να αποφεύγουμε τη δημιουργία μιας δομής NaiveDateTime απευθείας. Πάντως, είναι πολύ χρήσιμη για αντιπαραβολές προτύπων. Για παράδειγμα:

iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07") == {:ok, ~N[2015-01-23 23:50:07]}

Δημιουργία Σφραγίδων

Ένας από τους στόχους της Elixir είναι να είναι μια επεκτάσιμη γλώσσα προγραμματισμού. Δεν πρέπει να σας δημιουργεί έκπληξη ότι μπορείτε πολύ εύκολα να δημιουργήσετε τις δικές σας σφραγίδες. Σε αυτό το παράδειγμα, θα δημιουργήσουμε μια σφραγίδα για να μετατρέψουμε ένα αλφαριθμητικό σε κεφαλαία. Επειδή υπάρχει ήδη μια συνάρτηση για αυτό στον πυρήνα της Elixir (String.upcase/1), θα περιβάλλουμε τη σφραγίδα μας γύρω από αυτή τη συνάρτηση.


iex> defmodule MySigils do
...>   def sigil_u(string, []), do: String.upcase(string)
...> end

iex> import MySigils
nil

iex> ~u/elixir school/
ELIXIR SCHOOL

Πρώτα δημιουργούμε μία ενότητα ονομαζόμενη MySigils και μέσα σε αυτή δημιουργούμε τη συνάρτηση που ονομάζεται sigil_u. Επειδή δεν υπάρχει ~u σφραγίδα, μπορούμε να το χρησιμοποιήσουμε. Το _u δείχνει ότι θέλουμε να χρησιμοποιήσουμε το u σαν το χαρακτήρα μετά την περισπωμένη. Ο ορισμός της συνάρτησης δέχεται δύο ορίσματα, μία είσοδο και μια λίστα.

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