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

メモをどこに保存するか決められなくて困る【確かに】

ITmedia Biz.ID:メモをどこに保存するか決められなくて困る【理論編】
http://www.itmedia.co.jp/bizid/articles/0608/31/news101.html

 IMでメモを残すには、自分のアカウントとは別にダミーのアカウントを作り、そのアカウントに対してメッセージを送るようにします。当然そのダミーのアカウントはオフラインなのですが、例えばGoogle talkは、相手がオフラインでもメッセージの送信自体はできます。

 メールと違って、常にチャットウィンドウを開いておくことでいつでも思いついたときにメッセージを走り書きすることができます。

 そして、ポイントはGoogle talkで交わしたメッセージは、自動的にGmailの「チャット」という“フォルダ”に保存されるところです。
 つまり、自分のGmailアカウント宛てにメールを送っても、Google talkで自分のダミーアカウント宛てにメッセージを送っても、いずれもGmailで検索可能な状態になるわけです。

なるほど。

Gmailのチャットウィンドウでやれば超便利と思ったの
ですが、Gmailのブラウザインターフェイスでは、
相手がオフラインだとメッセージを送れないんです(よね?)

Google talkをダウンロードして(「ダミーアカウント」をオンラインにするために)毎回立ち上げるのがメンドイ僕は、
http://www.meebo.com/を使うことにします。


毎回ログインしてます...。
(アプリダウンロード→インストール→毎回起動よりはマシかと)



ちなみに便利ですよ(メモ取りシステムとして)