Menu Navigasi

Tutorial Tutorial Pemrograman Part 73: PHP Generators - Efisiensi Memori dengan Iterasi Lazy

AI Generated
27 Desember 2025
18 views
Tutorial Tutorial Pemrograman Part 73: PHP Generators - Efisiensi Memori dengan Iterasi Lazy

Pendahuluan

Selamat datang di part 73 seri tutorial pemrograman PHP! Kali ini, kita akan menyelami konsep Generators. Generators memungkinkan kita untuk membuat iterator tanpa harus menyimpan seluruh data dalam memori sekaligus. Ini sangat berguna ketika kita bekerja dengan dataset besar atau aliran data yang tak terbatas. Prasyarat untuk tutorial ini adalah pemahaman dasar tentang iterator dan penggunaan yield.

Artikel ini melanjutkan pembahasan sebelumnya tentang 'PHP Reflection - Mengintip dan Memanipulasi Struktur Kode'. Meskipun Reflection dan Generators memiliki fungsi yang berbeda, keduanya adalah fitur tingkat lanjut yang membantu kita menulis kode PHP yang lebih efisien dan fleksibel.

Konsep Dasar

Bayangkan Anda memiliki file log berukuran gigabyte dan Anda ingin membaca setiap barisnya. Jika Anda membaca seluruh file ke dalam array, memori Anda akan cepat habis. Di sinilah Generators berperan. Generators seperti 'tukang bagi' yang hanya memberikan satu potong data setiap kali diminta. Mereka 'menghasilkan' (yield) nilai satu per satu, alih-alih menghasilkan seluruh koleksi sekaligus.

Secara teknis, sebuah Generator adalah sebuah fungsi yang menggunakan keyword yield. Ketika fungsi Generator dipanggil, ia tidak langsung mengeksekusi kodenya. Sebaliknya, ia mengembalikan sebuah objek yang dapat diiterasi. Setiap kali kita mengiterasi objek tersebut, fungsi akan dieksekusi hingga menemukan keyword yield. Nilai yang dihasilkan oleh yield akan dikembalikan, dan eksekusi fungsi akan ditunda sampai iterasi berikutnya.

Hands-on Coding

Contoh Sederhana Generator

Mari kita buat generator sederhana yang menghasilkan angka dari 1 hingga 5:



Penjelasan:

  • angkaGenerator(int $max): Sebuah fungsi generator yang menerima angka maksimal sebagai argumen. Tanda return type Generator mengindikasikan bahwa fungsi tersebut adalah sebuah generator
  • yield $i: Menghasilkan nilai $i saat iterasi.
  • foreach: Mengiterasi objek generator dan mencetak setiap angka.

Generator dengan Keys

Anda juga bisa menghasilkan key-value pairs dengan generator, mirip dengan array asosiatif:


 'Merah';
    yield 'pisang' => 'Kuning';
    yield 'jeruk' => 'Oranye';
}

foreach (buahGenerator() as $buah => $warna) {
    echo "$buah berwarna $warna
"; } // Output: // apel berwarna Merah // pisang berwarna Kuning // jeruk berwarna Oranye ?>

Generator untuk Membaca File Besar

Contoh paling umum penggunaan generator adalah untuk membaca file besar baris per baris tanpa memuat seluruh file ke memori:


getMessage();
}
?>

Pastikan Anda memiliki file bernama large_file.txt di direktori yang sama dengan script PHP Anda, atau sesuaikan path $namaFile.

Common Pittfalls

  • Lupa menggunakan yield: Jika Anda membuat fungsi yang dimaksudkan sebagai generator tetapi lupa menggunakan yield, fungsi tersebut tidak akan menjadi generator dan mungkin berperilaku tidak terduga.
  • Mengakses file di luar generator: Pastikan file yang dibuka di dalam generator ditutup dengan benar, idealnya di dalam blok finally untuk menangani pengecualian. Namun dalam contoh diatas, file langsung ditutup setelah iterasi selesai.
  • Kesalahan penanganan pengecualian: Generator dapat melemparkan pengecualian. Pastikan Anda menangani pengecualian ini dengan benar di kode yang menggunakan generator.

Challenge

Buat sebuah generator yang menghasilkan bilangan Fibonacci hingga angka tertentu. Misalnya, jika input adalah 10, generator harus menghasilkan urutan: 0, 1, 1, 2, 3, 5, 8.

Sumber Referensi

Bagikan: