Open7

ECMAScript data flow proposal 調べる

おーみーおーみー

Pipe Operator

パイプライン演算子を追加する提案。F# Pipes と Hack Pipes があったが Hack が採用される流れらしい。

Hack Pipes は |> の右側に任意の式を書け、プレースホルダーとして @ を書くとそこに左辺の値が入る。任意の式が書けるので他の 4 プロポーザルができないようなこともできる。

1 + x;
x |> @ + 1;

[...iter];
iter |> [...@];

await (await fetch("https://example.com/")).json();
await fetch("https://example.com/") |> await @.json();

個人的にはF#のほうがミニマルで好きだったが、Ramda.jsとかfp-tsみたいな狂った関数型ライブラリのユーザーしかうれしくないだろうと言われたら一巻の終わりなので致し方ないか。プレースホルダーは結局確定したのだろうか?

おーみーおーみー

call-this Operator

https://github.com/tc39/proposal-call-this

Extensionsのサブセット。fn.call(reciever, arg0)reciever:>fn(arg0) と書けるだけ。

function add(other) {
  return this + other;
}

console.log(1:>add(2));

Stage 0で止まっていたbind operatorというやつの後継であり、最初はbind-this operatorという名前

https://yuku.dev/articles/2021-11-11/javascript-bind-this-op

だった。その名前の通り Function.prototype.bind の糖衣でもあったのだが、partial applicationとの兼ね合いで除去されて現在に至るっぽい。

こんな文法があった
function add(other) {
  return this + other;
}

const add1 = 1::add;
const add1and2 = 1::add(2);

console.log(add1(2));
console.log(add1and2());