pipeline operator
パイプライン演算子
こんなコードを
h(g(f(x)))
こんな風に書ける
x |> f |> g |> h
括弧も減るし
関数を呼ばれる順に記述できるし
インデントも深くならない
ElixirやElm、F#、OCamlに入っている
JavaScriptにも草案がある
Pipe Operator for JavaScript
Juliaにもある
https://syl1.gitbook.io/julia-language-a-concise-tutorial/useful-packages/pipe
OCamlでのシンプルな(|>)の定義
code:ml
let (|>) x f = f x
似た機能
DartのCascade notation
..でチェーンする
チェーンしたメソッドの戻り値は、チェーンせずに使ったときの戻り値と異なるものになる
https://dart.dev/guides/language/language-tour#cascade-notation-
http://dart-ing.blogspot.com/2013/04/blog-post.html
code:dart
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
final addressBook = (AddressBookBuilder()
..name = 'jenny'
..email = 'jenny@example.com'
..phone = (PhoneNumberBuilder()
..number = '415-555-0100'
..label = 'home')
.build())
.build();
参考
パイプライン演算子の歴史 - まめめも
わかりやすいし、リンクも豊富
F#やOCamlのそれと、Elixirのそれが似て非なるものであることなどが解説されている
https://stackoverflow.com/questions/7698133/method-chaining-vs-pipe-operator
https://qiita.com/cedretaber/items/6a3831367439f64756ab