{category}

PHP - ジェネレータ

yield

イールド(制御構造

意味 値を生成して返す


yieldとは?

yieldは、ジェネレータ関数内で使用される言語構造です。関数の実行を一時停止し、指定された値を呼び出し元に返します。その後、関数の状態を保持したまま、次の呼び出しで続きから実行を再開できます。大量のデータを扱う際のメモリ効率化に役立ちます。

yieldの具体的な使い方

大きな範囲の数値生成

function rangeGenerator($start, $end) {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
}

$generator = rangeGenerator(1, 1000000);
$count = 0;

foreach ($generator as $number) {
    $count++;
    if ($count <= 5) {
        echo $number . ' ';
    } elseif ($count == 6) {
        echo '...';
        break;
    }
}

echo "\n生成された数の総数: " . $count;

👇出力結果

1 2 3 4 5 ...
生成された数の総数: 6

この例では、rangeGenerator関数が大きな範囲の数値を生成します。yieldを使用することで、すべての数値をメモリに保持せずに効率的に処理できます。最初の5つの数字のみを表示し、処理した数の総数を出力します。

無限シーケンスの生成

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

$fibonacci = fibonacciGenerator();
$count = 0;

foreach ($fibonacci as $number) {
    echo $number . ' ';
    $count++;
    if ($count >= 10) break;
}

👇出力結果

0 1 1 2 3 5 8 13 21 34 

この例では、fibonacciGenerator関数が無限のフィボナッチ数列を生成します。yieldを使用することで、必要な数だけ生成し、処理を制御できます。最初の10個のフィボナッチ数を表示します。

yieldに関するよくある質問

Q. yieldとreturnの違いは?
A. yieldは関数の実行を一時停止し、値を返した後も状態を保持します。一方、returnは関数の実行を完全に終了します。yieldはメモリ効率が良く、大量のデータを扱う際に有用です。
Q. yieldを使う利点は?
A. yieldの主な利点は、メモリ効率と遅延評価です。大きなデータセットを扱う際、全てのデータをメモリに保持する必要がなく、必要なときに値を生成できます。これにより、メモリ使用量を抑えつつ、大量のデータ処理が可能になります。
Q. yieldは複数回使える?
A. はい、1つの関数内で複数回yieldを使用できます。これにより、複数の値を順番に生成することができます。各yieldが呼び出されるたびに、関数は一時停止し、次のyieldまで実行が再開されます。

yieldが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのyieldやwhile、else、continue、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

while

条件付きの繰り返し処理

種類: ループ

else

条件が偽なら実行

種類: 条件分岐

continue

ループの次の繰り返しへ

種類: ジャンプ

array_unique()

配列の重複値を削除

種類: 配列関数

NULL

値が存在しないことを表す

種類: 特殊型