JavaScript - ヤイルド演算子

ヤイルド演算子の紹介

こんにちは、将来のプログラマーさんたち!今日は、JavaScriptのヤイルド演算子の世界に足を踏み入れる興奮的な旅を embark します。ヤイルドを考えますと、コードの魔法のポーズボタンです。プログラムに「ここで息を吐いて、後でまたここから続けよう」と言うようなものです。興味深いでしょう?さあ、潜りましょう!

JavaScript - Yield Operator

ヤイルド演算子とは?

ヤイルド演算子は、JavaScript内でジェネレータ関数の中で使われる特別なキーワードです。今、あなたが考えていることを知っています - 「ジェネレータ関数?一体何者ですか?」心配しないでください、それにたどり着きます!まずは、ジェネレータ関数を特別な種類の関数、ポーズと再開をできるものと考えてください。ヤイルド演算子がこのポーズと再開を可能にしています。

実世界の類似

長い本を読んでいると、休憩を取る際にブックマークを使って場所を保存しますよね。ヤイルド演算子は、コードの中のそのブックマークのようなものです。関数がポーズできる場所をマークし、後で戻ってくるためのものです。

ヤイルド演算子の構文

ヤイルド演算子の基本的な構文は非常にシンプルです:

yield expression;

ここで、expression は関数がポーズしたときに「ヤイルド」または返したい値です。これはオプションで、提供しない場合、undefined がヤイルドされます。

ジェネレータ関数内のヤイルド演算子

さあ、この不思議なジェネレータ関数について話しましょう。ジェネレータ関数は、function キーワードの後ろにアスタリスク (*) をつけて定義されます:

function* generatorFunction() {
yield 'Hello';
yield 'World';
}

ジェネレータ関数を呼び出すと、即座に中のコードを実行しません。代わりに、実行をコントロールできるジェネレータオブジェクトを返します。

例:値の返却

簡単な例を見てみましょう:

function* countToThree() {
yield 1;
yield 2;
yield 3;
}

const generator = countToThree();
console.log(generator.next().value); // 出力: 1
console.log(generator.next().value); // 出力: 2
console.log(generator.next().value); // 出力: 3

この例では、ジェネレータの next() を呼び出すたびに、yield 文に達するまで実行し、その時点でポーズし、ヤイルドされた値を返します。関数が「次の数字を教える、次の数字が必要なときにまた呼んで」と言っているようなものです!

例:undefined の返却

値を指定しない場合、undefined を返します:

function* yieldUndefined() {
yield;
yield 'Hello';
yield;
}

const gen = yieldUndefined();
console.log(gen.next().value); // 出力: undefined
console.log(gen.next().value); // 出力: Hello
console.log(gen.next().value); // 出力: undefined

これは、ジェネレータ内にポーズポイントを作りたいときに便利です。

例:next() メソッドに値を渡す

ここで非常に興味深いことがあります。next() メソッドに値を渡すことができ、この値はジェネレータ関数を受け取ります:

function* conversation() {
const name = yield "What's your name?";
yield `Hello, ${name}!`;
const hobby = yield "What's your favorite hobby?";
yield `${hobby} sounds fun!`;
}

const talk = conversation();
console.log(talk.next().value);        // 出力: What's your name?
console.log(talk.next('Alice').value); // 出力: Hello, Alice!
console.log(talk.next().value);        // 出力: What's your favorite hobby?
console.log(talk.next('Coding').value); // 出力: Coding sounds fun!

これはコードと会話をしているようなものです。ジェネレータが質問をし、答えを待ち、それに基づいて続けます。すごいですね?

実用的な例:フィボナッチ数列ジェネレータ

この全ての知識を合わせて、実用的な例を見てみましょう。フィボナッチ数列を生成するジェネレータ関数を作ります:

function* fibonacciGenerator() {
let a = 0, b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}

const fib = fibonacciGenerator();
for (let i = 0; i < 10; i++) {
console.log(fib.next().value);
}

このジェネレータは無限にフィボナッチ数を生成し続けます。next() を呼び出すたびに、次の数をヤイルドします。ここでは for ループを使って最初の10個の数を取得していますが、もっと続けたいだけ続けられます!

結論

ヤイルド演算子は、コードの流れを制御する新しい可能性を開くJavaScriptの強力なツールです。ポーズと再開ができる関数を作成できるため、時系列の値のワークフローを簡単にできます。

忘れないでください、ヤイルドとジェネレータを効果的に使うには練習が必要です。すぐに理解できない場合も、諦めずに実験を続けると、すぐにプロのようにヤイルドできるようになります!

メソッド一覧

以下は、ジェネレータで使用される主要なメソッドの一覧です:

メソッド 説明
next() ジェネレータの次の値を返す
return(value) 指定された値を返し、ジェネレータを終了する
throw(error) エラーをジェネレータに投げる

未来のJavaScriptの魔法使いたち、お楽しみください!忘れないでください、すべての専門家もかつては初心者でした。練習を続け、好奇心を持ち続けると、いつかプログラミングの偉人になるでしょう!

Credits: Image by storyset