Fork me on GitHub

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

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

Πίνακας περιεχομένων

Εισαγωγή

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

foo(bar(baz(new_function(other_function()))))

Εδώ, περνάμε την τιμή της other_function/1 στην 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
iex: warning: you are piping into a function call without parentheses, which may be ambiguous. Please wrap the function you are piping into in parenthesis. For example:

foo 1 |> bar 2 |> baz 3

Should be written as:

foo(1) |> bar(2) |> baz(3)

["Η", "ELIXIR", "ΤΑ", "ΣΠΑΕΙ"]

Share This Page