5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2024

Day 20

Elixirのチートシートを作ろう #14 パイプ演算子

Last updated at Posted at 2024-12-19

1. OverView

こいつも何度も使ってしまっている、パイプ演算子であります。
実際、()でネストしまくりよりもわかりやすく、特にサンプルなんかだと重宝します。

奥が深い物なのですが、とりあえず現時点での考え方を書いていきましょう。

2. とりあえず解説

Elixirのパイプ演算子(|>)は、関数の出力を次の関数の入力として渡すために使用されます。

function_1() |> function_2()

function_1の結果を、function_2の第一引数として渡します。

Elixir Schoolでは、以下のサンプルがありますね。

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

さぁ、正解を見ずに、ちょっとやってみますか…

ネストの深い順番、一番下から、書いていきます。

other_function/0の結果を、new_function/1に、new_function/1の結果をbaz/1に、
baz/1の結果をbar/1に、bar/1bの結果を、foo/1に…うん、あってるな。

まー、この手の書き方を簡略化するのが、パイプです。

上の例を書くと、

other_function() |> new_function() |> baz() |> bar() |> foo()

処理の流れが、つかみやすくなったのではないでしょうか?
さて、Elixir Schoolの例をやってみましょう。

' 'で区切られた文字列を分割する。

"Elixir rocks" |> String.split()
["Elixir", "rocks"]

1)で区切った文字を、大文字に変換する

"Elixir rocks" |> String.upcase() |> String.split()
["ELIXIR", "ROCKS"]

さて、ここでおまけ
dbg()と言う関数がありまして、これが、Elixrのパイプ処理の流れを表示してくれます。

iex(94)> "Elixir rocks" |> String.upcase() |> String.split() |> dbg()
[iex:94: (file)]
"Elixir rocks" #=> "Elixir rocks"
|> String.upcase() #=> "ELIXIR ROCKS"
|> String.split() #=> ["ELIXIR", "ROCKS"]

["ELIXIR", "ROCKS"]

処理の流れがよくわかるので、動きがよくわかるんじゃないでしょうか。

3. 本日のチートシート!

制御構造の名 説明
パイプ演算子 関数の出力を次の関数の入力として渡すために使用されます。 "Elixir rocks"

4. 本日の課題

Elixir Schoolでは、ベストプラクティスとして「関数のアリティが1より多いなら括弧を使うようにしてください」
と書いてますが、うーん、これはケースバイケースかなぁ、と思います。
もう少し、書いてから戻ってきて、解説してみますわ。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?