最近「DHTMLのイベント登録にonclick属性を使うか否か」という話題がホットになったのだけど、その中のコメントで「「無名関数」じゃなくて「匿名関数」というべき」というコメントを見かけたのだけど、私はむしろ「無名関数」の方がよいと考えたのでentry。

匿名実名問題ではなくて、匿名無名問題ね:-)

たしかに、現状ぐぐると「匿名関数」の方が「無名関数」よりも10倍も多い。

英語だと、その差はもっと開く。

しかし、よく考えてみると、匿名とは名前を匿う=隠すことではあっても名前そのものがないことではない。その点に留意すれば、匿名(anonymous)よりも無名(nameless)の方が表現としては適切ではないか。

ちなみに、匿名関数の別名としてクロージャー(closure)もよく使われている。が、本来のクロージャーは変数を内包(enclose)していなければならない。たとえば

var counter = 0;
window.setInterval(function(){
  document.getElementById('counter').innerHTML = counter++;
}, 100);

setInterval()の第一引数はクロージャーだけど、

window.setInterval(function(){
  document.getElementById('date').innerHTML = new Date();
}, 100);

はクロージャーではない。

その他、サブ(sub)とかラムダ(lambda)というあだ名もあるけど、前者はPerlコミュニティ、後者はLispコミュニティでないと通じない方言なので、やはり通常は無名関数、英語では nameless function と呼ぶのがよいとではないかと考える。

ところで、リテラル(literal)などを「無名データ」とか「匿名データ」と呼ばないのは何故だろう?

Dan the Man with too Many Functions to Name - So make it nameless if ok