JAVA Script .next() .Value .doneを使ったfor文

提供:yonewiki

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へ戻る。