大量のオブジェクトを処理するときに考えた事(1)(イテレーターパターンについて) - kkana's blogこれを書いているときに勘違いしていたこと1つめ
このページで イテレーターパターンとは「オブジェクトの持つデータ構造を非公開にして、hasNext()とnext()という2つのメソッドだけを公開するというものです」 とあります。前回書いたものはすべてのメソッドを公開にしていたのでちょっと違うかも・・・。
JavaScriptパターン ―優れたアプリケーションのための作法
- 作者: Stoyan Stefanov,豊福剛
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/02/16
- メディア: 大型本
- 購入: 22人 クリック: 907回
- この商品を含むブログ (77件) を見る
もう一度これを参考に書くと・・・
//イレテータパターン var List = function(dataArray){ //ポインタの位置 var index = 0; //データ var data = dataArray; //データの数 var length = data.length; return { //現在のポインタのデータを返す current : function(){ return data[index]; }, //次があるか? hasNext : function(){ if(index < length){ return true; } else{ return false; } }, //次の要素を返す next : function(){ if(!this.hasNext()){ return false; } else{ index++; return data[index]; } }, //ポインタを先頭に戻す rewind : function(){ index = 0; } } } var dataArray = []; for (var i = 0; i < 10; i++) { var p = i; dataArray.push(p); } var list = List(dataArray); while (list.hasNext()) { console.log(list.current()); list.next(); }
という感じかなぁ・・・。dataはプライベートでもっておく。 公開する部分にhasNext nextの他に、現在のデータを返すものと、巻き戻しを入れておきました。