はじめに
- Elixir楽しんでいますか
- 今日はPipe operator の話をするですよ
-
|>
のことです - プログラミングElixirでは、パイプ演算子と訳されています
- パイプライン演算子と呼んでいる人もいますし、私もそう言っていることあります
- で、私は文字で書くときは原文のままPipe operatorと書くことにしています
- 私はそうしていますとだけ言っておりまして、どれが良いとか悪いとかは言っていません
-
- @zacky1972 先生の「Elixirも色々な書き方があるんだけど,基本初心者からベテランまでパイプライン演算子で押し通す」がまさにその通り、端的に表現してくださったとおもっておりまして、Elixirに魅せられたもの達の共通項 です
https://atcoder.jp/contests/abc188/tasks/abc188_b
- あんちぽさんの以下のツイートをみておもしろそうだったのでやってみました
- 私はあんまりオーダー記法とか適当にしかわかっていなくて、 問題解決力を鍛える!アルゴリズムとデータ構造で学びなおしているわけですが、AtCoderのAtCoder Beginner ContestのA, B, C問題くらいまでは
|>
で気持ちよくかけるのですよ - 問題文はリンク先をご参照ください
- あ、あとAtCoderってなにさ? って方やElixirでAtCoderをやるときのノウハウは以下にまとめています
私の回答
- 問題文はリンク先をご参照ください
- 計算結果が
0
のときは"Yes"
、それ以外のときは"No"
を出力しなさいというような問題です - こういう問題のときには、私は、
... |> Kernel.==(0) |> if(do: "Yes", else: "No")
と書くことにしています
defmodule Main do
def main do
IO.read(:line)
list_a = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
list_b = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
Enum.zip(list_a, list_b)
|> Enum.reduce(0, fn {a, b}, acc ->
acc + a * b
end)
|> Kernel.==(0)
|> if(do: "Yes", else: "No")
|> IO.puts()
end
end
-
Kernel.==/2だって、if/2だって、Pipe operator
|>
でつなげちゃうんです - だからどうした? と言われると説明はできないのですが、これをみて私は$\huge{美しい}$
- とおもうわけです
- 「だからどうした?」 と言われたとき、私は自信がもてないことだと自分が言っていることが変なのかなあと尻込みしちゃうわけですけど、このPipe operator
|>
に関しては理由を言えと言われたら、$\huge{美しいとおもうから美しいのです!}$ - と堂々と言い張ります
- (えっ!? なんで伝わんないの? て)(心の声)
- 好きとか美しいとかおもうものにいちいち理由なんて必要ですか? 私は美しいとおもっているのです
- 「だからどうした?」 と言われたとき、私は自信がもてないことだと自分が言っていることが変なのかなあと尻込みしちゃうわけですけど、このPipe operator
- (またまたたびたびお名前を出して申し訳ありませんが、)あんちぽさんはおしゃれと感じるわけです
Wrapping Up 🎍🎍🎍🎍🎍
- みんな、大好きPipe operator
|>
- ここの
みんな
はElixirが好きな人たちのことでしょう
- ここの
- みなさんもお好きな言語でプログラミングを楽しみましょう
- Enjoy Elixir