Menu Navigasi

Tutorial Tutorial Pemrograman Part 77: PHP Generators untuk Iterasi Efisien

AI Generated
27 Desember 2025
17 views
Tutorial Tutorial Pemrograman Part 77: PHP Generators untuk Iterasi Efisien

Pendahuluan

Selamat datang di part 77 dari seri tutorial Tutorial Pemrograman kita! Di part ini, kita akan membahas tentang PHP Generators. Generators adalah cara yang sangat efisien untuk mengiterasi data dalam jumlah besar tanpa membebani memori. Jika Anda pernah mengalami masalah dengan script PHP yang menggunakan terlalu banyak memori saat memproses data besar, generators adalah solusinya.

Prasyarat: Anda harus familiar dengan dasar-dasar PHP, array, dan perulangan. Sebaiknya Anda juga sudah membaca part sebelumnya tentang membangun sistem plugin sederhana dengan PHP, karena pemahaman tentang iterasi akan sangat membantu.

Konsep Dasar

Bayangkan Anda memiliki buku yang sangat tebal, misalnya kamus. Untuk membaca seluruh kamus, Anda tidak perlu membawanya sekaligus. Anda bisa membaca satu halaman, mencatat informasi penting, lalu melanjutkan ke halaman berikutnya. Generators bekerja seperti itu. Mereka menghasilkan nilai satu per satu, sesuai permintaan, daripada memuat seluruh data ke memori sekaligus.

Secara teknis, generator adalah fungsi yang menghasilkan nilai menggunakan keyword yield. Ketika sebuah generator dipanggil, ia tidak langsung dieksekusi. Ia mengembalikan sebuah objek yang dapat diiterasi (iterator). Setiap kali kita meminta nilai berikutnya dari iterator, fungsi generator akan dieksekusi hingga menemukan keyword yield. Nilai setelah yield akan dikembalikan, dan eksekusi fungsi akan ditangguhkan. Ketika kita meminta nilai selanjutnya, eksekusi dilanjutkan dari titik penangguhan tersebut.

Hands-on Coding

Mari kita lihat contoh sederhana generator yang menghasilkan urutan angka:



Penjelasan Kode:

  • function angkaGenerator(int $start, int $end): Generator: Mendefinisikan fungsi generator yang menerima dua argumen, $start dan $end, yang menentukan rentang angka yang akan dihasilkan. Tipe kembalian adalah Generator, yang menandakan bahwa fungsi ini adalah generator.
  • for ($i = $start; $i <= $end; $i++): Melakukan perulangan dari $start hingga $end.
  • yield $i: Menghasilkan nilai $i. Keyword yield adalah inti dari generator. Ia mengembalikan nilai dan menangguhkan eksekusi fungsi.
  • foreach (angkaGenerator(1, 5) as $angka): Menggunakan generator dengan perulangan foreach. Setiap kali perulangan berjalan, ia meminta nilai berikutnya dari generator, yang kemudian menghasilkan angka berikutnya.

Contoh Lebih Kompleks: Membaca File Besar

Berikut adalah contoh yang lebih praktis, yaitu membaca file besar baris demi baris tanpa memuat seluruh file ke memori:


getMessage();
}
?>

Penjelasan Kode:

  • function bacaBarisFile(string $namaFile): Generator: Mendefinisikan fungsi generator yang menerima nama file sebagai argumen.
  • $file = fopen($namaFile, 'r'): Membuka file dalam mode baca.
  • while ($baris = fgets($file)): Membaca file baris demi baris menggunakan fgets.
  • yield $baris: Menghasilkan setiap baris yang dibaca.
  • fclose($file): Menutup file setelah selesai dibaca.
  • Blok try...catch digunakan untuk menangani pengecualian jika file tidak dapat dibuka.

Common Pittfalls

  • Lupa keyword yield: Jika Anda lupa menggunakan yield, fungsi Anda tidak akan menjadi generator.
  • Mencoba mengakses generator setelah selesai: Setelah generator menghasilkan semua nilainya, ia akan selesai. Mencoba mengaksesnya lagi akan menghasilkan nilai kosong.
  • Menutup file di luar generator: Pastikan Anda menutup file di dalam generator, sehingga resource dibebaskan dengan benar.

Challenge

Buatlah generator yang menghasilkan bilangan Fibonacci hingga batas tertentu. Bilangan Fibonacci adalah urutan angka di mana setiap angka adalah jumlah dari dua angka sebelumnya (misalnya, 0, 1, 1, 2, 3, 5, 8...).

Sumber Referensi

Bagikan: