Selamat datang di Part 68 dari seri tutorial Tutorial Pemrograman kita! Di part ini, kita akan menyelami konsep PHP Generators. Generators memungkinkan kita untuk menulis kode yang melakukan iterasi data secara efisien, terutama ketika berurusan dengan dataset yang besar. Bayangkan jika kita harus memproses file log berukuran gigabyte. Memuat seluruh file ke dalam memori akan sangat boros. Generators hadir untuk mengatasi masalah ini.
Prasyarat: Sebelum memulai, pastikan Anda familiar dengan dasar-dasar PHP dan konsep iterasi (loop).
Apa itu Generator? Generator adalah fungsi yang menghasilkan nilai secara bertahap (yields) alih-alih mengembalikan satu nilai sekaligus. Setiap kali `yield` dipanggil, fungsi generator menangguhkan eksekusinya dan mengembalikan nilai yang dihasilkan. Ketika generator diiterasi lagi, eksekusi dilanjutkan dari titik terakhir. Ini berbeda dengan fungsi biasa yang mengembalikan nilai tunggal dan selesai.
Analogi Dunia Nyata: Bayangkan pabrik permen. Alih-alih memproduksi semua permen sekaligus dan menumpuknya, pabrik menghasilkan permen satu per satu sesuai permintaan. Generator bekerja seperti itu: ia hanya menghasilkan nilai saat dibutuhkan.
<?php
function angkaGenerator(int $max):
Generator
{
for ($i = 1; $i <= $max; $i++) {
yield $i;
}
}
$generator = angkaGenerator(5);
foreach ($generator as $angka) {
echo $angka . " <br>";
}
?>
Penjelasan Kode:
function angkaGenerator(int $max): Generator: Mendefinisikan fungsi generator bernama angkaGenerator yang menerima satu argumen integer $max dan mengembalikan objek Generator.for ($i = 1; $i <= $max; $i++): Loop yang berjalan dari 1 hingga $max.yield $i: Menghasilkan nilai $i. Fungsi menangguhkan eksekusi di sini dan mengembalikan nilai tersebut. Ketika loop berlanjut, eksekusi dilanjutkan dari titik ini.$generator = angkaGenerator(5): Membuat instance generator dengan memanggil fungsi angkaGenerator dengan nilai 5.foreach ($generator as $angka): Melakukan iterasi melalui generator. Setiap kali loop berjalan, generator menghasilkan nilai berikutnya.echo $angka . " <br>": Mencetak nilai yang dihasilkan.<?php
function bacaBarisPerBaris(string $file):
Generator
{
$handle = fopen($file, 'r');
if (!$handle) {
throw new Exception("Tidak dapat membuka file.");
}
while (($line = fgets($handle)) !== false) {
yield $line;
}
fclose($handle);
}
$file = 'large_file.txt'; // Ganti dengan nama file Anda
try {
foreach (bacaBarisPerBaris($file) as $baris) {
echo $baris;
// Lakukan sesuatu dengan setiap baris
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>
Penjelasan Kode:
function bacaBarisPerBaris(string $file): Generator: Mendefinisikan fungsi generator yang menerima path file sebagai argumen.$handle = fopen($file, 'r'): Membuka file untuk dibaca.while (($line = fgets($handle)) !== false): Membaca file baris per baris.yield $line: Menghasilkan setiap baris file.fclose($handle): Menutup file setelah selesai dibaca.try...catch digunakan untuk menangani pengecualian jika file tidak dapat dibuka.Generator.Buatlah generator yang menghasilkan bilangan Fibonacci hingga nilai tertentu.