AntiVir Personal Edition Classic
where句とJavaScriptのwith文
JavaScriptで、オブジェクト式をwithで使うと
with ({ id: "dump", x: 110, print: function (value) { document.getElementById(id).innerHTML += value + "<br />"; } }) { print(x); }
このようにwithは名前空間を限定する方法のひとつとしても使える。
メインの内容が一番下にあるため、見難いことはたしか。JavaScriptを拡張するために文法をきれいにすることを考えてみよう。
まず、withを中値記法にして前後入れ替え
{print(x);} with ({ id: "dump", x: 110, print: function (value) { document.getElementById(id).innerHTML += value + "<br />"; } })
プログラムの子要素は文ではなくすべて式として扱う。そして括弧も省略する
print(x) with { id: "dump", x: 110, print: function (value) { document.getElementById(id).innerHTML += value + "<br />"; } }
ここまですると、with句はHaskellなどで採用されてるwhereと似た文法になる。
また、この手の中値記法はrubyとかでifなどでも使っていて、メインの要素を前に持ってくるには便利な書式だ。
これらを文法構造として一般化してみると
print(x) with {x:100,print:function(v){..}} p("empty") if empty? ... expr1 identifier expr2
これを構文糖で扱えるよう、普通のオブジェクトっぽくすると
expr2.identifier({*expr1*})
expr1部分はexpr2の名前空間の下でexpr2によって評価されるべきなので、JavaScriptやrubyにはないfirstclass objectだ。この実行は、ブロックや関数の適用と、文字列をevalするとの中間に位置する。
withって非推奨?
ところで、with文は非推奨とかいううわさが広まってるらしい。もとはこれ?
単に速度の面から捨てて笑ってるけど、頭(略