Menu Navigasi

Tutorial Tutorial Pemrograman Part 60: Mastering PHP Generators for Efficient Data Processing

AI Generated
28 Desember 2025
20 views
Tutorial Tutorial Pemrograman Part 60: Mastering PHP Generators for Efficient Data Processing

Pendahuluan

Selamat datang di bagian ke-60 dari seri tutorial Tutorial Pemrograman! Di bagian ini, kita akan membahas tentang PHP Generators. Generators memungkinkan kita untuk memproses data berukuran besar secara efisien dengan menghindari pemuatan seluruh dataset ke dalam memori sekaligus. Pemahaman tentang iterasi dan array di PHP akan sangat membantu.

Prasyarat

  • Pengetahuan dasar tentang PHP, termasuk variabel, loops, dan fungsi.
  • Pemahaman tentang array dan iterasi.
  • Sedikit pengalaman dengan penggunaan yield akan membantu.

Konsep Dasar

Bayangkan Anda memiliki file log berukuran sangat besar. Jika Anda mencoba memuat seluruh isi file tersebut ke dalam array, memori server Anda mungkin akan kewalahan. Disinilah Generators masuk. Generator adalah fungsi yang menghasilkan nilai satu per satu saat diminta, daripada menghasilkan seluruh kumpulan nilai sekaligus. Setiap kali yield dipanggil, fungsi akan 'pause' dan mengembalikan nilai. Ketika diminta untuk nilai berikutnya, fungsi akan melanjutkan dari titik terakhir ia berhenti.

Analoginya seperti ini: Bayangkan Anda memiliki mesin pembuat es krim. Daripada membuat seluruh batch es krim sekaligus, mesin ini membuat satu scoop es krim setiap kali Anda memintanya. Ini lebih efisien daripada membuat seluruh batch sekaligus, terutama jika Anda hanya membutuhkan beberapa scoop.

Hands-on Coding

Contoh 1: Generator Sederhana

<?php
function numberGenerator(int $start, int $end):
Generator
{
 for ($i = $start; $i <= $end; $i++) {
 yield $i;
 }
}

$numbers = numberGenerator(1, 5);

foreach ($numbers as $number) {
 echo $number . " "; // Output: 1 2 3 4 5
}
?>

Penjelasan:

  • Fungsi numberGenerator menggunakan keyword yield untuk menghasilkan nilai.
  • Setiap kali yield $i dipanggil, fungsi akan 'pause' dan mengembalikan nilai $i.
  • Loop foreach kemudian mengiterasi nilai-nilai yang dihasilkan oleh generator.

Contoh 2: Membaca File Besar dengan Generator

<?php
function readFileLineByLine(string $filename):
Generator
{
 $file = fopen($filename, 'r');
 if (!$file) {
 throw new Exception('Tidak dapat membuka file: ' . $filename);
 }

 while (($line = fgets($file)) !== false) {
 yield $line;
 }

 fclose($file);
}

$filename = 'large_file.txt';

try {
 foreach (readFileLineByLine($filename) as $line) {
 echo $line;
 }
} catch (Exception $e) {
 echo 'Error: ' . $e->getMessage();
}
?>

Penjelasan:

  • Fungsi readFileLineByLine membuka file dan membaca setiap baris menggunakan fgets.
  • yield $line mengembalikan setiap baris file satu per satu.
  • Ini memungkinkan kita memproses file besar tanpa memuat seluruh isi file ke dalam memori.
  • Error Handling: try...catch digunakan untuk menangani pengecualian jika file tidak dapat dibuka, sejalan dengan Part sebelumnya mengenai Error Handling.

Common Pittfalls

  • **Lupa Keyword `yield`:** Tanpa `yield`, fungsi tidak akan menjadi generator.
  • **Menggunakan Generator Sekali Saja:** Generator hanya dapat diiterasi sekali. Setelah selesai menghasilkan nilai, generator tidak dapat diulang kembali dari awal tanpa membuat instance baru.
  • **Tidak Menangani Pengecualian:** Pastikan untuk menangani pengecualian dengan baik, terutama saat bekerja dengan file.

Challenge

Buat generator yang menghasilkan bilangan Fibonacci hingga jumlah tertentu. Contoh: jika jumlahnya adalah 10, generator harus menghasilkan 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Sumber Referensi

Bagikan: