2017/12/02
tc39のリポジトリを中心に気になる提案をまとめます。
do expressions(stage-1)
リポジトリ
https://github.com/tc39/proposal-do-expressions
概要
関数型言語のようにifやtry、switchなどを式のように扱えるようにする為にdo式を追加しようという提案です。
例
let b = true;
let x = do {
if (b) {
'hoge';
} else {
'foo';
}
};
assert(x === 'hoge');
その他
「doいらなくね?普通にifなどを式として扱おうぜ」みたいなissueがあがっています。
https://github.com/tc39/proposal-do-expressions/issues/9
何故これではダメなのかはよく分かりません。後方互換性的な問題があるのでしょうか?
optional chaining(stage-1)
リポジトリ
https://github.com/tc
2017/11/18
bind operatorとは
func.call(obj)をobj::func()と書けるシンタックスシュガーです。
::obj.funcと書くとobj.func.bind(obj)となる構文もありますが今回は不要なのでスルーします
今までのJavaScript
ここでは例として引数の文字列を2倍して返す関数twoを作ります
function two(str){
return str+str;
}
呼び出し
two('x');//'xx'
問題点
この程度なら特に問題はありません。
しかし、文字列加工の処理などで以下のような事になってしまう事ありますよね?
z(y(x(str)));
まず括弧の対応が分かりにくいです。
そして関数はx→y→zの順に呼び出されるのに、見た目はz→y→xと逆になってしまいます。
プロトタイプ拡張は?
名前の衝突などの危険があるので使いたくない。
bind operator
function two(){
return this+this;
}
呼び出し
"x"::two(