JavaScriptの関数*(function*)とは?ジェネレーター関数の基本と使い方
function*宣言とは
JavaScriptのfunction*宣言は、ジェネレーター関数を定義するための構文です。ジェネレーター関数を呼び出すと、即座に処理が完了するのではなく、Generatorオブジェクトを返します。
通常の関数は一度呼び出されると最後まで一気に実行されますが、ジェネレーター関数では、yieldキーワードの位置で処理を一時停止し、後から再開することができます。この仕組みにより、コードのフロー制御を柔軟に管理できるのが大きな特徴です。
構文
ジェネレーター関数の構文は以下のとおりです。functionキーワードの直後にアスタリスク(*)を付けます。アスタリスクの位置は、スペースの有無にかかわらずいずれの書き方でも動作します。
function *myFunction() {}
// または
function* myFunction() {}
// または
function*myFunction() {}ジェネレーター関数の使い方
ここからは、実際のコード例を使って、ジェネレーター関数の使い方を確認していきましょう。
サンプルコード
<html>
<body>
<script>
function* display() {
var num = 1;
while (num < 5)
yield num++;
}
var myGenerator = display();
document.write(myGenerator.next().value);
document.write("<br>"+myGenerator.next().value);
document.write("<br>"+myGenerator.next().value);
document.write("<br>"+myGenerator.next().value);
document.write("<br>"+myGenerator.next().value);
</script>
</body>
</html>実行結果
1 2 3 4 undefined
コードの解説
この例では、ジェネレーター関数display()の中で、変数numを1から順にインクリメントしながらyieldで値を返しています。
next()メソッドを呼び出すたびに、前回yieldで停止していた箇所から処理が再開され、次の値がvalueプロパティとして取得できます。
- 1回目〜4回目の
next()呼び出し:whileループ内のyieldにより、1、2、3、4が順番に返される - 5回目の
next()呼び出し:ループ条件num < 5が成立しなくなり、関数が終了するためundefinedが返される
このように、ジェネレーター関数は「必要なときに必要なだけ値を取り出す」という遅延評価的な処理を実現でき、無限シーケンスの生成や非同期処理の制御など、さまざまな場面で活用できます。
-
JavaScriptの型変換に便利な「+」演算子の重要性とは?具体例付きで解説
JavaScriptにおける「+」演算子は、数値の加算や文字列の連結など幅広い用途を持つ一方で、実は型変換においても非常に重要な役割を果たしています。普段は足し算の計算に使うことが多いですが、単項演算子(オペランドが一つだけの形)として使うことで、文字列を驚くほど簡単に数値へ変換できるのです。 文字列を数値へ変換する例 <html> <body> <script> var num = 23; int = +num;
-
JavaScriptの型強制(Type Coercion)とは?仕組みを初心者向けにわかりやすく解説
型強制(Type Coercion)とは、あるデータ型が自動的・暗黙的に別のデータ型へと変換される仕組みのことです。JavaScriptは動的型付け言語であり、開発者が明示的に型を指定しなくても、状況に応じて値の型が自動的に変換されます。特に注意が必要なのが「+」演算子です。片方が文字列の場合、数値は文字列に変換されて文字列の連結として処理されます。一方、「-」「*」「/」などの算術演算子では、文字列は数値へ変換されるため、挙動の違いを理解しておくことが重要です。以下に、JavaScriptにおける型強制の動作を確認できるサンプルコードを示します。サンプルコード<!DOCTYPE htm