注:この文書はProject Lambdaの提案を和訳したものです。訳の正確性は保証しません。
この文章におかしなところがあればオリジナルを参照してください。
Brian Goetz 2010/10/10
この文書はJava言語にラムダ式を追加する案です。このスケッチはMark Reinholdによって 2009/12に作られた原案をもとに作られました。前のバージョンは2010年7月に発表されました。
注:この文書はProject Lambdaの提案を和訳したものです。訳の正確性は保証しません。
この文章におかしなところがあればオリジナルを参照してください。
Brian Goetz 2010/10/10
この文書はJava言語にラムダ式を追加する案です。このスケッチはMark Reinholdによって 2009/12に作られた原案をもとに作られました。前のバージョンは2010年7月に発表されました。
class FacadeUser{
...
func(){
...
LowLevelComponent1 comp1 = new LowLevelComponent1();
LowLevelComponent2 comp2 = new LowLevelComponent2();
Facade facade = new Facade(comp1, comp2);
...
}
...
}
class Facade{
LowLevelComponent1 comp1;
LowLevelComponent2 comp2;
// constructor
Facade (LowLevelComponent1 comp1, LowLevelComponent2 comp2){
this.comp1 = comp1;
this.comp2 = comp2;
...
}
...
}
一方、wikipediaなんかでは、class FacadeUser{
...
function(){
Facade facade = new Facade();
...
}
...
}
class Facade{
private LowLevelComponent1 comp1;
private LowLevelComponent2 comp2;
// constructor
Facade (LowLevelComponent1 comp1, LowLevelComponent2 comp2){
this.comp1 = new LowLevelComponent1();
this.comp2 = new LowLevelComponent2();
...
}
...
}
現在デザインパターンを勉強中なのですが,さて,デザインパターンの中で一番を選ぶとしたら一体なんなのでしょうか。私が思うにそれはIteratorパターンでしょう。Iteratorパターンはプログラムを書く中で,最もよく使われ,最も直接目にすることはなく,今でも最もHOTなパターンです。
このパターンは集合に対し統一的にアクセスする時によく使われる実装を形式的にまとめたものでした。しかし今ではJavaを初めとし様々な言語でその実装を隠蔽しforeachとして利用できるようになっています。
Iteratorパターンは何故よく使われるのか,それは集合に対して汎用的に利用できるパターンだからでしょう。しかし最近ではメソッドチェーンと呼ばれるプログラムの書き方が流行り,集合に対する操作は今まで以上にエレガントに表現されるようになりました。
http://www.atmarkit.co.jp/fdotnet/chushin/comparedataproc_01/comparedataproc_01_01.html
今までのプログラムと見た目がぜんぜん違う!でも大丈夫,内部的には普通にIteratorパターンが使われています。Iteratorは不滅です。Javaはエレガントな言語じゃないので今まで通りifと一緒に拡張for文(Java5.0より追加された構文)を使ってください。
Iteratorパターンはよく内部イテレータと外部イテレータに分けて説明されます。多くの言語では外部イテレータの利用が言語レベルでサポートされています。では内部イテレータはどこで使われるのでしょうか。実は別のパターン,Observerパターンに姿を変えて利用されることがあります。
Observerは例えばマウス座標の監視などに使われます。でもよく考えるとObserverは連続で通知されるマウスの座標というデータを順に処理しているだけです。そう,これはIteratorパターンと同様なのです。Iteratorパターンがデータをpullして処理しているのに対し,Observerは向こうからデータがpushされる,ただそれだけの違いです。
さて,そんな事が真面目に研究されているプロジェクトがあります。その名もReactiveExtension.ちょっと調べてみるとpull型をpush型に変えるだけでこれだけの違いが現れるのかとびっくりします。
発端の映像はこちら(英語でココだけ見ても普通のことしか言ってないように見える)
http://channel9.msdn.com/blogs/charles/erik-meijer-rx-in-15-minutes
Reactive Exntensionがむっちゃ詳しいブログ
http://neue.cc/
ここらへんを見るとウヒョーとなれること,請け合いです。
var x =" World";
var o = { x: "He" };
function f(m){
for(var i = 0; i < arguments.length; i++){
m+=arguments[i];
}
m = this.x + m;
alert(m)
};
function push(){
f.apply(o,new Array("l","o",this.x));
};
こたえ