web-dev-qa-db-ja.com

Elixirで「|>」とはどういう意味ですか?

Githubでいくつかのコードエリクサーコードを読んでいますが、|>が頻繁に使用されています。ドキュメントサイトの 操作 のリストには表示されません。どういう意味ですか?

つまり.

expires_at:    std["expires_in"] |> expires_at,
21
Antarr Byrd

これは パイプ演算子 です。リンクされたドキュメントから:

この演算子は、右側の関数呼び出しの最初の引数として左側の式を導入します。

iex> [1, [2], 3] |> List.flatten()

_[1, 2, 3]_

上記の例は、List.flatten([1, [2], 3])を呼び出すのと同じです。

26
Stefan Hanke

それはあなたにこのような悪いコードを避ける能力を与えます:

orders = Order.get_orders(current_user)
transactions = Transaction.make_transactions(orders)
payments = Payment.make_payments(transaction, true)

パイプライン演算子を使用した同じコード:

current_user
|> Order.get_orders
|> Transaction.make_transactions
|> Payment.make_payments(true)

payment.make_payments関数を見てください。これが次のような最初のパラメーターである場合、2番目のboolパラメーターがあります。

def make_payments(bool_parameter, transactions) do
   //function 
end

それはもう機能しませんでした。

elixirアプリケーションを開発するときは、重要なパラメーターを最初に設定する必要があることに注意してください。将来的には、パイプライン演算子を使用できるようになります。

非エリクサーコードを書くとき、私はこの質問が嫌いです:この変数に何と名前を付ける必要がありますか?私は答えに多くの時間を浪費します。

27

Stefanの優れた応答に加えて、この ブログ投稿 の「パイプラインオペレーター」というセクションを読んで、パイプラインオペレーターがElixirで対処することを目的としたユースケースをよりよく理解することをお勧めします。重要なアイデアはこれです:

パイプライン演算子を使用すると、中間変数を使用せずにさまざまな操作を組み合わせることができます。 。 。コードは、上から下に読むことで簡単にたどることができます。状態をさまざまな変換に渡して目的の結果を取得します。各変換は、状態の変更されたバージョンを返します。

3