Menu Navigasi

Tutorial Tutorial Pemrograman Part 58: PHP Generators - Mengoptimalkan Penggunaan Memori dengan Yield

AI Generated
27 Desember 2025
24 views
Tutorial Tutorial Pemrograman Part 58: PHP Generators - Mengoptimalkan Penggunaan Memori dengan Yield

Pendahuluan

Selamat datang di part 58 dari seri tutorial Tutorial Pemrograman! Di bagian ini, kita akan membahas tentang PHP Generators, sebuah fitur yang sangat berguna untuk mengoptimalkan penggunaan memori saat bekerja dengan data dalam jumlah besar. Kita akan melihat bagaimana generators bekerja, manfaat penggunaannya, dan contoh kode praktis. Sebagai prasyarat, Anda diharapkan sudah memahami dasar-dasar PHP, termasuk iterasi (loop) dan fungsi. Part sebelumnya membahas tentang PHP Reflection API - Memahami dan Memanipulasi Struktur Kelas, sehingga pemahaman tentang object oriented programming akan sangat membantu.

Konsep Dasar

Bayangkan Anda sedang mengolah file teks yang sangat besar, misalnya file log berukuran gigabyte. Jika Anda membaca seluruh isi file ke dalam array, memori yang dibutuhkan akan sangat besar dan bisa menyebabkan aplikasi Anda menjadi lambat atau bahkan crash. Di sinilah generators berperan. Generators memungkinkan Anda untuk menghasilkan nilai secara on-demand, tanpa harus menyimpan seluruh data dalam memori. Generator bekerja dengan keyword yield, yang mirip dengan return, namun alih-alih menghentikan fungsi, yield akan menunda eksekusi dan mengembalikan nilai. Saat iterasi berikutnya, fungsi akan melanjutkan eksekusi dari titik terakhir di mana yield dipanggil.

Analogi Dunia Nyata:

Anggap saja Anda adalah tukang pos yang mengantarkan surat ke rumah-rumah di sebuah jalan. Alih-alih membawa seluruh surat sekaligus, Anda mengambil satu surat dari tas, mengantarkannya, lalu mengambil surat berikutnya. Generator bekerja seperti itu – menghasilkan data satu per satu saat dibutuhkan, bukan memuat semuanya sekaligus.

Hands-on Coding

Mari kita lihat contoh sederhana generator untuk menghasilkan deret angka:



Penjelasan Kode:

  • function generateNumbers(int $start, int $end): Generator: Mendefinisikan sebuah fungsi generator bernama generateNumbers yang menerima dua parameter, $start dan $end, dan mengembalikan objek Generator.
  • for ($i = $start; $i <= $end; $i++): Sebuah loop for yang berjalan dari $start hingga $end.
  • yield $i;: Keyword yield akan mengembalikan nilai $i dan menunda eksekusi fungsi. Setiap kali loop berlanjut, nilai berikutnya akan di-yield.
  • foreach (generateNumbers(1, 5) as $number): Loop foreach digunakan untuk mengiterasi nilai yang dihasilkan oleh generator. Setiap nilai akan disimpan dalam variabel $number.
  • echo "Angka: " . $number . "\n";: Menampilkan angka yang dihasilkan oleh generator.

Contoh lain, membaca file besar baris per baris menggunakan generator:


getMessage() . "\n";
}
?>

Penjelasan Kode:

  • function readFileByLine(string $filename): Generator: Mendefinisikan sebuah fungsi generator bernama readFileByLine yang menerima nama file sebagai parameter dan mengembalikan objek Generator.
  • $file = fopen($filename, 'r');: Membuka file dalam mode baca ('r').
  • while (!feof($file)): Loop while yang berjalan selama belum mencapai akhir file.
  • yield fgets($file);: Membaca satu baris dari file menggunakan fgets() dan mengembalikannya menggunakan yield.
  • fclose($file);: Menutup file setelah selesai dibaca.
  • foreach (readFileByLine($filename) as $line): Mengiterasi setiap baris yang dihasilkan oleh generator.
  • echo $line;: Menampilkan setiap baris.

Common Pittfalls

  • Lupa menggunakan yield: Jika Anda tidak menggunakan yield, fungsi Anda tidak akan menjadi generator.
  • Mengakses file yang sudah ditutup: Pastikan file masih terbuka saat Anda mencoba membaca data dari generator.
  • Penggunaan memori yang tidak tepat: Meskipun generators menghemat memori, Anda tetap perlu berhati-hati dengan operasi yang dilakukan di dalam generator, karena operasi tersebut masih bisa memakan memori.

Challenge

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

Sumber Referensi

Bagikan: