軌道
/
Elixir
Elixir
/
課程大綱
/
管道運算子
管道

管道運算子 在 Elixir

10 個練習

關於 管道運算子

|>運算子稱為管道運算子。它可以用來把一連串的函式呼叫串接起來,讓前一次函式呼叫所回傳的值,作為下一次函式呼叫的第一個引數傳入。

String.replace_suffix(String.upcase(String.duplicate("go ", 3)), " ", "!")

# versus

"go "
|> String.duplicate(3)
|> String.upcase()
|> String.replace_suffix(" ", "!")

它也可以寫在單一行裡:

"go " |> String.duplicate(3) |> String.upcase() |> String.replace_suffix(" ", "!")

Kernel函式通常到處都能省略Kernel模組名稱來使用,但在管道串接中使用這些函式時,就必須寫出模組名稱。舉例來說,2 * 3 == 6也可以寫成:

2 |> Kernel.*(3) |> Kernel.==(6)

什麼時候該用管道運算子、什麼時候不該用,純粹是個人偏好。有些 Elixir 開發者喜歡遵循這些規則:

  • 只有單一次函式呼叫時,不要使用管道運算子。

    # do
    String.split("hello", "")
    
    # don't
    "hello" |> String.split("")
    
  • 不要在管道串接中直接建立匿名函式。

    # do
    take_n_letters = fn n -> Enum.take(?a..?z, n) end
    2 |> Kernel.*(3) |> take_n_letters.()
    
    # don't
    2 |> Kernel.*(3) |> (fn n -> Enum.take(?a..?z, n) end).()
    
  • 管道串接一律以變數或字面值開頭,不要以函式呼叫開頭。

    # do
    "hello" |> String.upcase() |> String.split("")
    
    # don't
    String.upcase("hello") |> String.split("")
    
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 管道運算子

練習已鎖定

再解鎖 5 個練習,就能練習 管道運算子