トラック
/
Elixir
Elixir
/
シラバス
/
パイプ演算子
パイ

パイプ演算子 の Elixir

10個の演習

パイプ演算子について

|>演算子は、パイプ演算子と呼ばれます。関数呼び出しをつなげて、前の関数呼び出しが返した戻り値を、次の関数呼び出しの最初の引数として渡せるようにするものです。

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

# versus

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

1行で書くこともできます。

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

Kernelの関数は、ふだんはKernelというモジュール名を付けずにどこでも使いますが、パイプの連鎖の中でこれらの関数を使うときは、モジュール名が必要です。たとえば、2 * 3 == 6は次のようにも書けます。

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

パイプ演算子をいつ使うか、いつ使わないかは、好みの問題です。Elixirのエンジニアの中には、次のようなルールに従うことを好む人もいます。

  • 関数を1つだけ呼び出すときは、パイプ演算子を使いません。

    # 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個の演習のロックを解除してください