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

Τελεστής Σωλήνα

Ο τελεστής σωλήνα |> μεταφέρει το αποτέλεσμα μιας έκφρασης σαν το πρώτο όρισμα μιας άλλης έκφρασης.

Εισαγωγή

Ο προγραμματισμός μπορεί να φέρει ακαταστασία. Τόση ακαταστασία που οι κλήσεις συναρτήσεων μπορεί να είναι τόσο ένθετες που γίνεται δύσκολο να τις παρακολουθήσουμε. Λάβετε υπόψιν σας το παρακάτω παράδειγμα:

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!