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