ruang.work

Memahami Konsep Yield dalam PHP

  • Avatar for Anonymous
Anonymous

8 min read

go to Apa itu yield di PHP? section

Apa itu yield di PHP?

kata kunci yield berfungsi sebagai alat untuk membangun fungsi generator, yang bertindak sebagai iterator, yang dapat di akses melalui perulangan.

ketika menggunakan yield nilai tidak di simpan kedalam variable, namun langsung diberikan ke pemanggil (iterator)

contoh penggunaan yield

function generateNumbers() {
yield 1;
yield 2;
yield 3;
}
foreach (generateNumbers() as $number) {
echo $number . ' ';
}

nah karna yield ini dapat di akses melalui mekanisme iterator, dalam contoh ini menggunakan foreach. Maka disini setiap $yield yang didefinisikan di fungsi akan langsung diberikan kepada $number dan langsung dapat digunakan.

Intinya adalah yield ini seperti menyimpan nilai yang nanti dapat diakses menggunakan mekanisme iterator. gitu.

go to Yield and Its Essence section

Yield and Its Essence

Yield meminkan peran penting dalam fungsi generator, seperti yang dijelaskan di manual PHP:

“The heart of a generator function is the yield keyword. In its simplest form, a yield statement looks much like a return statement, except that instead of stopping execution of the function and returning, yield instead provides a value to the code looping over the generator and pauses execution of the generator function.”1

go to Lalu? apa yang dimaksud Generator Functions2 section

Lalu? apa yang dimaksud Generator Functions2

Fungsi generator merupakan pendekatan yang lebih efisien untuk membangun iterator, Dengan mendefinisikan fungsi seperti contoh dibawah ini yang bernama xrange

function xrange($min, $max) {
for ($i = $min; $i <= $max; $i++) {
yield $i;
}
}
foreach (xrange(1, 10) as $key => $value) {
echo "$key => $value", PHP_EOL;
}

maka output yang dihasilkan:

Terminal window
0 => 1
1 => 2
...
9 => 10

Dari sini dapat di sederhanakan bahwa xrange mengenerate nilai dari parameter $min dan $max. Kemudian nilai dari hasil fungsi xrange di simpan kedalam yield.

sehingga pada implementasinya di foreach nilai yang dihasilkan berupa sequence 1-10 digunakan untuk menghasilkan keluaran yang ada dengan $key yang dihasilkan dari foreach dan $value dari sequence xrange .

go to Membandingkan Fungsi Generator dengan Fungsi Biasa section

Membandingkan Fungsi Generator dengan Fungsi Biasa

Orang mungkin mempertanyakan mengapa fungsi range asli PHP tidak cukup untuk mencapai hasil yang sama. Memang, hasilnya mungkin sama, tetapi proses yang digunakan membedakannya.

Ketika menggunakan fungsi range, PHP akan mengeksekusi fungsi tersebut, membangun seluruh larik angka dalam memori, dan mengembalikan seluruh larik ke perulangan foreach untuk perulangan berikutnya.

Pada dasarnya, perulangan foreach beroperasi secara langsung pada larik. Bayangkan seperti menerima paket melalui pos; petugas pengiriman menyerahkan paket tersebut dan pergi, meninggalkan Anda untuk membuka dan mengakses isinya.

Sebaliknya, ketika menggunakan fungsi generator, PHP masuk ke dalam fungsi dan mengeksekusinya hingga mencapai akhir atau menemukan kata kunci hasil. Ketika menemukan hasil, PHP mengembalikan nilai saat ini ke perulangan luar dan menghentikan fungsi generator.

Selanjutnya, fungsi tersebut dilanjutkan dari titik hasil dan berlanjut hingga $max yang ditentukan tercapai dalam contoh. Interaksi antara perulangan foreach dan fungsi generator mirip dengan permainan pingpong, dengan masing-masing pihak saling bertukar kontrol.

go to Generating a Fibonacci sequence menggunakan yield section

Generating a Fibonacci sequence menggunakan yield

Deret Fibonacci adalah serangkaian angka di mana setiap angka adalah jumlah dari dua angka sebelumnya, biasanya dimulai dengan 0 dan 1. Fungsi generator dapat digunakan untuk membuat iterator yang menghasilkan angka Fibonacci dengan cepat, tanpa perlu menyimpan seluruh sequence dalam memori.

function fibonacciGenerator($length) {
$a = 0;
$b = 1;
for ($i = 0; $i < $length; $i++) {
yield $a; // Yield the current Fibonacci number
// Calculate the next Fibonacci number
$temp = $a + $b;
$a = $b;
$b = $temp;
}
}
// Generating and displaying the first 10 Fibonacci numbers
foreach (fibonacciGenerator(10) as $fibNumber) {
echo $fibNumber . ' ';
}

Output:

0 1 1 2 3 5 8 13 21 34

Pada contoh ini, kita memiliki fungsi generator yang disebut fibonacciGenerator, yang mengambil panjang squence Fibonacci yang diinginkan sebagai argumen. Di dalam fungsi tersebut, kita menginisialisasi dua variabel, $a dan $b, yang mewakili dua angka pertama dari squence (0 dan 1).

Perulangan for mengulang hingga panjang yang diinginkan, dan pada setiap perulangan, menghasilkan angka Fibonacci saat ini, yaitu $a. Kemudian, ia menghitung angka Fibonacci berikutnya dan memperbarui variabel $a dan $b yang sesuai.

Ketika kita menggunakan perulangan foreach untuk mengulangi generator, angka Fibonacci dihasilkan dengan cepat tanpa menghitung seluruh urutan.

Hal ini membuatnya hemat memori dan cocok untuk situasi di mana menghasilkan squence yang besar.

Menggunakan hasil dalam konteks ini memungkinkan kita untuk bekerja dengan squence tak terbatas juga, cukup dengan menghilangkan batas atas dalam perulangan for.

Sebagai contoh, kita dapat menggunakan `foreach (fibonacciGenerator(PHP_INT_MAX) as $fibNumber) untuk menghasilkan angka Fibonacci tanpa batas hingga batas integer maksimum PHP tercapai.

go to Footnotes section

Footnotes

  1. Data from a generator function.

  2. What does yield mean in PHP?.