「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
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);