ジェネレータを試してみます

javascript

概要

前回に投稿したジェネレータについて、実際にコードを書いて試してみます。
非常に簡単な例を書いてみます。

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として処理結果を受け取り、その内容を使用することが可能になります。

また、ジェネレータに対して、値を渡すことも可能なので、それはまた改めて試して投稿する予定です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です