「function」が長すぎる

好みかも知れませんが

JavaScriptとかASとかに限って、
クロージャとかでfunction(arg1,arg2){処理}って書くこのfunction(){}が嫌いです。長い。
しかも、引数を書くのもめんどくさい。というか名前を考えるのがめんどくさい。


誰かがいっぱい考えてると思いますが
$f("処理")で無名関数を生成するような、多少色々犠牲にしてでも楽するための自分ルールを考えてみた。JSで。

function $f(a,b){
	if(!b){
		b = a;
		a = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
	}
	return new Function(a.toString().replace(/^\//,"").replace(/\/$/,""),
		b.toString().replace(/\\\//g,"/").replace(/^\//,"").replace(/;?\/$/,"").replace(/;?([^;]+)$/,";return $1"));
}

みたいな関数を定義して(カッコわる)、

function(x,y){return x+y}

と書く代わりに、

$f("a+b") もしくは $f(/a+b/)

引数は、aからzまで$f側で順に自動で割り当てる。
最後の評価を自動的にreturn。

(function(x,y){return x+y})(1,3) //4
↓
$f("a+b")(1,3) //4

_を使ってないなら、(何でもいいけど)

_=$f;

で、もうひと文字短く。

(function(x,y){var z=4;return x+y+z;})(1,3) //8
↓
_(/var z=4;a+b+z/)(1,3) //8


prototype.js

new Ajax.Request(url,{onComplete:function(r){alert(r.responseText)}});
↓
new Ajax.Request(url,{onComplete:_(/alert(a.responseText)/)});
$R(0,10).findAll(function(v){return v%2==0}).map(function(v){return v+1}).map(function(v){return v+2});
↓
$R(0,10).findAll(_(/a%2==0/)).map(_(/a+1/)).map(_(/a+2/));

キモイかな
いやちょっとキモイな


これではもちろんこんなのには対応できません

function test(x) {
	return function(y){return x+y};
}
test(10)(20);