ジェネレーター関数で反復処理(function*, yield, next)

JavaScriptのコードで「yield」や「next()」などの記述を見かけて、どういった動作をするのか不思議に思ったことはないでしょうか?ここでは、function*構文でジェネレータ関数を実装して、ジェネレータの動作確認を行います。

動作確認
( yield, nextメソッドの動作を理解する )

nodeで動作確認します。app.jsというファイルを作成して、以下処理を記述します。

function* generatorFn1() {
  console.log('generatorFn1 1')
  yield 100
  console.log('generatorFn1 2')
  yield 200
  console.log('generatorFn1 3')
}

const generator1 = generatorFn1()

console.log('start')
console.log('next 1')
console.log(generator1.next())
console.log('next 2')
console.log(generator1.next())
console.log('next 3')
console.log(generator1.next())
console.log('next 4')
console.log(generator1.next())
console.log('end')

function*構文ジェネレータ関数 を実装でき、ジェネレータ関数から取得したオブジェクトを ジェネレータ といいます。上記例でいうと、ジェネレータ関数generatorFn1() であり、 ジェネレータgenerator1 です。

以下、実行結果です。

$ node app.js 
start
next 1
generatorFn1 1
{ value: 100, done: false }
next 2
generatorFn1 2
{ value: 200, done: false }
next 3
generatorFn1 3
{ value: undefined, done: true }
next 4
{ value: undefined, done: true }
end

ジェネレータの nextメソッド を呼び出すたびに、ジェネレータ関数の yield が記述された箇所まで実行されています。

nextメソッドの戻り値は valueプロパティyield で指定した値が格納されており、doneプロパティ にジェネレータ関数の処理が全て完了したか判定するためのboolean値が格納されています。

for of構文でジェネレータを利用

ジェネレータは for of構文 で利用できます。app.jsというファイルを作成して、以下処理を記述します。

function* indexGeneratorFn(from, to) {
  let index = from
  while (index <= to) {
    yield index++
  }
}

const indexGenerator = indexGeneratorFn(5, 10)
for (const index of indexGenerator) {
  console.log(index)
}

以下、実行結果です。

$ node app.js 
5
6
7
8
9
10

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。