JAVA Script .next() .Value .doneを使ったfor文
JAVA Scriptへ戻る。
概要
少し高度なfor文の使い方です。for in や for of より直感的ではない仕組みです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Generator/next によると、next()を使うと、value 実際に使いたい次々に取り出す配列値 と done 終了フラグ を返すという仕組みがあるとのこと。終わったら true だそうです。
例えば、
for(var arraydata = arrayobject, countobject = arraydata.next();
!countobject.done;
countobject = arraydata.next()){
… ;
var contentvalue= countobject.value;
…
}
for文はこの形式で構成されます。
例では、初期値の処理が二つになります。配列や連想配列構造のオブジェクトarrayobjectをarraydataに受け取り、この値に対してarraydata.next()を呼び出すたびに次の配列値へと移動しますが、最初の値の取り出しでもarraydata.next()が必要なので、実行して、実際に使う変数値として、countobject に保持させます。これがfor文の初期動作です。終了条件は、実際に使う値の countobject のメンバ関数 done(ダン) を監視すればよいことになります。最後の値を処理したら、true になります。
なので、終了条件は !countobject.done となります。
そして、次の値を実際に使用する変数 countobject に代入しつつも、arraydata.next() を呼び出せばいいです。for文の中では実際に使う値を、contentvalue = countobject.valueのように取り出すことをするでしょう。実際、mathjax でも、実にオーソドックスに配列の値を使ったfor文を処理しています。
一方で、もうちょっと変わった連想配列の繰り返し処理中で特殊なfor文(for of:キー値のみ取り出し/for in:値の取り出し)は使っていないようです。for in だと関数内で追加で定義宣言(これをよくプロトタイプ関数と言っています。)した関数が配列の中の要素として使われるので、値が関数でないかを確認しなくてはいけなくなったりします。複雑なプログラムでは実は意外と使いにくいfor in。for of で配列値を指定した場合はキーではなく、配列値が使えます。
for(var val 【of/in】 Array){…}
直感的な for in や for of に比べると難しい .next() を利用したfor文ですが、覚えておくとよいでしょう。
JAVA Scriptへ戻る。