JavaScriptに相当する「python's Generator」はありますか?
PS: Python のジェネレーターは、大きな配列、ハッシュを1 回反復処理する
必要がある場合、非常にメモリ効率が高くなります...それらはオンザフライで値を生成します」
(Python のジェネレーターは、このスレッドで説明されています: What does the "yield" keyword do in Python? )
JavaScriptに相当する「python's Generator」はありますか?
PS: Python のジェネレーターは、大きな配列、ハッシュを1 回反復処理する
必要がある場合、非常にメモリ効率が高くなります...それらはオンザフライで値を生成します」
(Python のジェネレーターは、このスレッドで説明されています: What does the "yield" keyword do in Python? )
あまり実用的ではありませんが、次のようにして同じ基本的な効果を得ることができます。
function make_generator(start, end) {
var i=start;
return function() {
if (i<end) {
output = i;
i += 1;
return output;
}
else {
return null;
}
}
}
var out = document.getElementById('out');
var generator = make_generator(1,10);
var g = generator();
while (g) {
if (out.innerHTML)
out.innerHTML = out.innerHTML + '<br>' + g;
else
out.innerHTML = g;
g = generator();
}
標準的な方法ではありません。一部のブラウザーは既に Python スタイルのジェネレーターを実装していますが、明示的にアクティブ化する必要がある拡張機能が必要です。ジェネレーターを ECMAScript 仕様の次のバージョンに追加するという提案がありますが、それがすぐに使用可能になるとは思えません。
これまでのところ、古い学校の外部反復子パターンを使用するのが最善です。より複雑なケースで書くのは面倒ですが、それは同じくらい強力です。
JavaScript 1.7 では:
function rangeGen(n) {
for (let i = 0; i < n; i++)
yield i;
}