ここ数年の間、Java SE 7の一部として、あるいは今後いつか、詳細不明のリリースで、Java言語にクロージャ(source)を追加することについて、多岐にわたる議論が行われてきた。いくつか の提案(BGGA, CICE, FCM)や、コンセンサス(source)に関する話があった。有効な提案の見方のひとつは、言語としてのJavaに与える影響「Java らしさ」を保ったままで基本的な部分の変更が可能かどうか、を良く考えることである。Javapolisでは、Joshua Bloch氏がこの議論に関する考え(source)と、彼がCICEがより適したアプローチであると考える理由を述べた。 Javaらしさについて説明しながら、Joshua Bloch氏は1997年6月に発表されたIEEE ComputerのGosling氏の論文を引用した。 Javaはブルー・カラーの言語です。博士論文の材料で
http://martinfowler.com/bliki/Closure.html 動的言語に興味がでてくると、 クロージャやブロックと呼ばれる概念に出会うと思います。 C/C++/Java/C# などクロージャを持たない言語をご使用の方は、 どういったものなのかご存知ないかもしれません。 ここでは簡単にクロージャについて説明します。 クロージャを持った素晴らしい言語を使ったことある方にとっては、 あまり面白くない話かもしれません。 クロージャは長年使用されてきました。 私が最初に出会ったのは、おそらく Smalltalk だったと思います。 Smalltalk ではブロックと呼んでいました。 Lisp ではクロージャを多用しています。 Ruby でもクロージャが提供されています――多くの rubyist がスクリプト言語に Ruby を選ぶのはこのためです。 基本的にクロージャとは、ブ
JavaScriptでの大きな特徴と言えば、やはり「関数も変数(オブジェクト)として代入できる」という点ではないでしょうか。例えば、 var func = function(){ document.write(1);}; func(); #=>1といった感じ。 これができるからこそ、色々と応用的なことができるのです。 そのトピックとして大きく二つあります。それが高階関数とクロージャ。最初は私も理解するのに時間がかかりましたが、上の基本を常に頭に入れておくことで理解することができました。 高階関数 変数っぽく扱えるなら、関数の引数に関数のオブジェクトを入れられるでしょ!という考えです。そういやC言語でも関数ポインタとか言うのありましたっけ・・。これを使うと何ができるか?自由度の高い関数が定義できます。今回は例としてRubyで言う配列のeachメソッドを実装してみました。 クロージャ 名前の
Rubyにはブロックというものが存在する。 array = [1,3,5,9] array.each{|i| puts i}.each{|i| print ' '; puts i*2} 結果: 1 3 5 9 2 6 10 18このブロックは、高階関数なのである。 まつもと直伝 プログラミングのオキテ 第5回(1) | 日経 xTECH(クロステック) eachには { }と中括弧で囲むブロックを渡しているのである。 このブロックとは処理の集まりである。つまり名前のない関数と考えることができる。 そうだ無名関数だ。無名関数については、 第14回 無名関数 - bingo_nakanishiの他言語出身者のためのPerl入門 あたりで詳しく説明してきたとおり。 高階関数については、 第15回 map - bingo_nakanishiの他言語出身者のためのPerl入門 第16回 無名関数をも
クロージャとは クロージャは、言葉で説明するのが大変難しい概念です。 あなたは、自転車の乗り方を、口だけで説明できるでしょうか? あなたは、螺旋(らせん)の形を、言葉だけで説明できるでしょうか? ずばり、できないでしょう。 しかし、自転車に乗ることはできますし、針金で螺旋の形を作ることはできるでしょう。 「クロージャ」もこれと同じです。 だから、Wikipediaのこんな解説を見ても落ち込まないでください。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。 理解できないですよね? 私もそうでした。 クロージャを既に知っている人にしか、この文章は理解できないでしょう。 クロージャを作るのは難しくない しかし、説明するのは難しくても、作るのは意外と簡単。それが
Douglas Crockford, 水野 貴明 ¥ 1,890 手っ取り早く習得 痒いとこだけ掻いてくれる JavaScriptを勉強しなおすのにとってもよいです。 JavaScript コアに関する最高の本 付録を除くと100ページちょいという、とてもライトな本ですが、内容は濃密です。JavaScript の中で、一番わかりにくいだろうなと思われるようなところが集中的に解説されているように感じられ、勉強したてでかつそろそろわかりかけてきたなーと思い始めていた僕にとって、最適の一冊でした。知って良かったなと思えるところがたくさんありましたので、これから少しずつ紹介して行きたいと思いますが、今日はその中でも特に印象的だった、変数のスコープにまつわるお話をしてみたいと思います。 変数のスコープはその変数が宣言された関数の中だけに限定されます。なんとなく知ってはいたのですが、for 文とかでは
2009年01月19日18:15 カテゴリLightweight Languages javascript - block代わりのclosureとその問題 リハビリに手頃な問題だったので。 これ、実は「Java開発者のためのAjax実践開発入門」でも紹介されている書き方。 for 文と無名関数のイディオム - IT戦記 というわけで、これをすべて解決するのが for (var i = 0, len = list.length; i < len; i++) (function(node, i) { var text = node.textContent; node.onclick = function() { alert(text) }; })(list[i], i) なのだ。 ただし、コメント欄に残された問題が残る。 自分でも検証してみた。 n = : これ、デフォルトでは100万回にして
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く