Τελεστής Σωλήνα
Ο τελεστής σωλήνα |>
μεταφέρει το αποτέλεσμα μιας έκφρασης σαν το πρώτο όρισμα μιας άλλης έκφρασης.
Εισαγωγή
Ο προγραμματισμός μπορεί να φέρει ακαταστασία. Τόση ακαταστασία που οι κλήσεις συναρτήσεων μπορεί να είναι τόσο ένθετες που γίνεται δύσκολο να τις παρακολουθήσουμε. Λάβετε υπόψιν σας το παρακάτω παράδειγμα:
foo(bar(baz(new_function(other_function()))))
Εδώ, περνάμε την τιμή της other_function/0
στην new_function/1
, και την new_function/1
στην baz/1
, την baz/1
στην bar/1
και τέλος το αποτέλεσμα της bar/1
στην foo/1
. Η Elixir κάνει μια πραγματιστική προσέγγιση σε αυτό το συντακτικό χάος δίνοντάς μας τον τελεστή σωλήνα. Ο τελεστής σωλήνα (|>
) δέχεται το αποτέλεσμα μιας έκφρασης και το μεταφέρει. Ας δούμε το ίδιο παράδειγμα ξαναγραμμένο χρησιμοποιώντας τον τελεστή σωλήνα:
other_function() |> new_function() |> baz() |> bar() |> foo()
Ο σωλήνας δέχεται το αποτέλεσμα στην αριστερή, και το περνάει στην δεξιά μεριά.
Παραδείγματα
Για αυτό το σετ παραδειγμάτων, θα χρησιμοποιήσουμε την ενότητα Αλφαριθμητικών της Elixir.
- Κερματισμός Αλφαριθμητικών (χαλαρός)
iex> "Η Elixir τα σπάει" |> String.split()
["Η", "Elixir", "τα", "σπάει"]
- Αλλαγή σε κεφαλαία των κερμάτων
iex> "Η Elixir τα σπάει" |> String.upcase() |> String.split()
["Η", "ELIXIR", "ΤΑ", "ΣΠΑΕΙ"]
- Έλεγχος κατάληξης
iex> "elixir" |> String.ends_with?("ixir")
true
Καλές Πρακτικές
Αν η τάξη μιας συνάρτησης είναι πάνω από 1, τότε χρησιμοποιήστε παρενθέσεις. Δεν είναι πολύ σημαντικό για την Elixir, αλλά βοηθάει άλλους προγραμματιστές που μπορεί να παρερμηνεύσουν τον κώδικά σας. Αν πάρουμε το δεύτερο παράδειγμα και αφαιρέσουμε τις παρενθέσεις από την Enum.map/2
, συναντούμε την παρακάτω προειδοποίηση:
iex> "Η Elixir τα σπάει" |> String.split |> Enum.map &String.upcase/1
warning: parentheses are required when piping into a function call. For example:
foo 1 |> bar 2 |> baz 3
is ambiguous and should be written as
foo(1) |> bar(2) |> baz(3)
Ambiguous pipe found at:
iex:1
["Η", "ELIXIR", "ΤΑ", "ΣΠΆΕΙ"]
Έπιασες λάθος ή θέλεις να συνεισφέρεις στο μάθημα; Επεξεργαστείτε αυτό το μάθημα στο GitHub!