Σφραγίδες
Εργασία με τις σφραγίδες και δημιουργία τους.
Επισκόπηση Σφραγίδων
Η Elixir παρέχεια ένα εναλλακτικό συντακτικό για την αναπαράσταση και εργασία με τα κυριολεκτικά.
Μια σφραγίδα θα ξεκινήσει με μια περισπωμένη ~
ακολουθούμενη από ένα χαρακτήρα.
Ο πυρήνας της Elixir μας παρέχει μερικές προκαθορισμένες σφραγίδες, αλλά είναι πιθανό να δημιουργήσετε τις δικές σας όταν χρειάζεται να επεκτείνετε τη γλώσσα.
Μια λίστα των διαθέσιμων σφραγίδων περιλαμβάνει:
-
~C
Δημιουργεί μια λίστα χαρακτήρων χωρίς διαφυγές ή παρεμβολές -
~c
Δημιουργεί μια λίστα χαρακτήρων με διαφυγές και παρεμβολές -
~R
Δημιουργεί μια κοινή έκφραση χωρίς διαφυγές ή παρεμβολές -
~r
Δημιουργεί μια κοινή έκφραση με διαφυγές και παρεμβολές -
~S
Δημιουργεί ένα αλφαριθμητικό χωρίς διαφυγές ή παρεμβολές -
~s
Δημιουργεί ένα αλφαριθμητικό με διαφυγές και παρεμβολές -
~W
Δημιουργεί μια λίστα λέξεων χωρίς διαφυγές ή παρεμβολές -
~W
Δημιουργεί μια λίστα λέξεων με διαφυγές και παρεμβολές -
~Ν
Δημιουργεί μια δομήNaiveDateTime
Μια λίστα με διαχωριστικά περιλαμβάνει:
-
<...>
Ένα ζευγάρι “μεγαλύτερο από” - “μικρότερο από” -
{...}
Ένα ζευγάρι άγκιστρων -
[...]
Ένα ζευγάρι αγκύλων -
(...)
Ένα ζευγάρι παρενθέσεων -
|...|
Ένα ζευγάρι σωλήνων -
/.../
Ένα ζευγάρι καθέτων -
"..."
Ένα ζευγάρι διπλών εισαγωγικών -
'...'
Ένα ζευγάρι μονών εισαγωγικών
Λίστες Χαρακτήρων
Οι σφραγίδες ~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!