概要
前回に投稿したジェネレータについて、実際にコードを書いて試してみます。
非常に簡単な例を書いてみます。
function* g_test(s)
{
console.log(s);
yield;
console.log(s+1);
yield;
console.log(s+2);
}
//ジェネレータ関数に引数を渡して呼び出す
let gene = g_test(100);
//1回目の実行
gene.next();
//2回目の実行
gene.next();
//3回目の実行
gene.next();
上記を実行すると、次のようになります。
100 101 102
geneを生成した後、gene.next();とすることで、g_test関数を実行しています。
ここで、注意が必要な点は、functionの後に「*」をつけていることです。
function* g_test(s)
と記述することで、g_test()はジェネレータとしての振る舞いをする関数として定義されています。
また、ジェネレータから値を取り出す際には、関数内部で値を返すように書く方法があります。
次のようなサンプルを書いて、試してみます。
function* g_test(s)
{
yield s;
yield s+10;
yield s+20;
}
//ジェネレータ関数に引数を渡して呼び出す
let gene = g_test(100);
//1回目の実行
console.log(gene.next());
//2回目の実行
console.log(gene.next());
//3回目の実行
console.log(gene.next());
上記の場合は、firefoxの開発ツールで確認したところ、下記のような出力がされます。
Object { value: 100, done: false }
Object { value: 110, done: false }
Object { value: 120, done: false }
注意する点は、ジェネレータの2回目の呼び出しと、3回目の呼び出し時に、
関数内で「yield 」の値を返しているという点です。
関数内でyieldを返すことにより、呼び出し元でObjectとして処理結果を受け取り、その内容を使用することが可能になります。
また、ジェネレータに対して、値を渡すことも可能なので、それはまた改めて試して投稿する予定です。