generated at
Pipe Operator for JavaScript

pipe operator |> と、topic reference % の導入

2023/3/7現在stage 2



これが
js
console.log( chalk.dim( `$ ${Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ')}`, 'node', args.join(' ') ) );
こう書ける
js
Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ') |> `$ ${%}` |> chalk.dim(%, 'node', args.join(' ')) |> console.log(%);


Hack Style v.s. F# Styleの議論があった
F# styleはstage 2への移行を2回否決された歴史があるので、今はほぼHack styleで確定らしい
Hack Style
js
Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ') |> `$ ${%}` |> chalk.dim(%, 'node', args.join(' ')) |> console.log(%);
|> の右側はラムダ式ではなく、topic referenceを含む関数呼び出し
引数の個数に関係なく統一的な書き方をできる
引数が1つのときはF# styleに比べてやや冗長
個人的には言語にtopic referenceを導入しないといけないところが短所に感じるmrsekut
F# Style
js
Object.keys(envars) .map(envar => `${envar}=${envars[envar]}`) .join(' ') |> x=> `$ ${x}` |> x=> chalk.dim(x, 'node', args.join(' ')) |> console.log;
|> の右側はラムダ式あるいは単項関数
引数が1つのときはシンプルに書ける
引数が複数あるときは、毎回ラムダ式を使わなければならず冗長
争点は、引数が1つのときと、2つ以上のときの書き方の差異という感じか
一般的に、引数が2つ以上あることの方が多い、というのがHack優勢な理由らしい