Menu Navigasi

Tutorial Tutorial Pemrograman Part 72: PHP Generators - Iterasi Tanpa Memori Berlebih

AI Generated
30 Desember 2025
17 views
Tutorial Tutorial Pemrograman Part 72: PHP Generators - Iterasi Tanpa Memori Berlebih

Pendahuluan

Selamat datang di part 72 seri tutorial pemrograman PHP! Kali ini, kita akan membahas tentang PHP Generators. Generators memungkinkan kita untuk melakukan iterasi data tanpa membebani memori. Ini sangat berguna ketika kita berurusan dengan dataset besar atau proses yang menghasilkan banyak data. Sebagai prasyarat, sebaiknya Anda sudah familiar dengan konsep dasar loop dan iterasi dalam PHP, serta memahami bagaimana fungsi bekerja. Mengingat Part 71 membahas 'PHP Reflection API - Membongkar Struktur Kelas', generator dapat digunakan untuk mengiterasi properti atau metode kelas secara efisien.

Konsep Dasar

Bayangkan Anda memiliki pabrik yang menghasilkan ribuan produk. Alih-alih menyimpan semua produk sekaligus di gudang (yang memakan banyak tempat), pabrik tersebut hanya memproduksi satu produk setiap kali ada permintaan. PHP Generators bekerja seperti itu. Mereka menghasilkan nilai satu per satu saat dibutuhkan, tidak menyimpan semua nilai dalam memori sekaligus. Secara teknis, generator adalah fungsi yang menggunakan keyword yield untuk menghasilkan nilai.

Hands-on Coding

Mari kita buat contoh sederhana generator untuk menghasilkan deret bilangan Fibonacci:


<?php
function fibonacciGenerator(int $max):
    Generator
{
    $a = 0;
    $b = 1;

    for ($i = 0; $i < $max; $i++) {
        yield $a;

        $temp = $a + $b;
        $a = $b;
        $b = $temp;
    }
}

// Menggunakan generator
foreach (fibonacciGenerator(10) as $number) {
    echo $number . " ";
}
// Output: 0 1 1 2 3 5 8 13 21 34 

?>

Penjelasan Kode:

  • function fibonacciGenerator(int $max): Generator: Mendefinisikan fungsi generator yang menerima jumlah maksimum deret Fibonacci yang akan dihasilkan. Tanda : Generator adalah return type hint yang memastikan fungsi ini mengembalikan object Generator.
  • $a = 0; dan $b = 1;: Menginisialisasi dua variabel awal untuk deret Fibonacci.
  • for ($i = 0; $i < $max; $i++): Loop untuk menghasilkan deret sebanyak $max kali.
  • yield $a;: Keyword yield menghasilkan nilai $a dan 'menjeda' eksekusi fungsi. Ketika iterasi selanjutnya diminta, fungsi akan melanjutkan dari titik ini.
  • $temp = $a + $b;, $a = $b;, dan $b = $temp;: Menghitung nilai Fibonacci berikutnya.
  • foreach (fibonacciGenerator(10) as $number): Loop foreach digunakan untuk mengiterasi nilai-nilai yang dihasilkan oleh generator.

Generator dengan Key

Generator juga bisa menghasilkan nilai dengan key, seperti array asosiatif:


<?php
function keyValueGenerator(array $data):
    Generator
{
    foreach ($data as $key => $value) {
        yield $key => $value;
    }
}

$data = ['nama' => 'John', 'usia' => 30, 'kota' => 'New York'];

foreach (keyValueGenerator($data) as $key => $value) {
    echo $key . ": " . $value . "<br>";
}
// Output:
// nama: John
// usia: 30
// kota: New York
?>

Common Pitfalls

  • Lupa Keyword yield: Jika Anda tidak menggunakan yield dalam fungsi, itu bukan generator.
  • Penggunaan Memori yang Tidak Tepat: Meskipun generator menghemat memori, jangan menggunakannya jika data yang Anda proses sudah ada dalam memori.
  • Kesalahan Logika dalam Fungsi: Pastikan logika di dalam fungsi generator Anda benar. Kesalahan logika dapat menyebabkan generator menghasilkan nilai yang salah atau berhenti secara tak terduga.

Challenge

Buatlah sebuah generator yang menghasilkan bilangan prima antara 1 dan 100.

Sumber Referensi

Bagikan: