Menu
CoddyTech

Pola Iterator

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 56 dari 61.

Pola Iterator menyediakan cara untuk mengakses elemen-elemen dalam koleksi secara berurutan tanpa menampilkan struktur dasarnya. Alih-alih memberikan akses langsung ke array kepada pengguna, kamu memberikan mereka sebuah object yang tahu cara menelusuri data satu elemen setiap kali.

Iterator biasanya membutuhkan dua informasi: referensi ke koleksi dan posisi saat ini. Di C, kita membuat struct untuk menyimpan status ini:

typedef struct {
    int* data;      // pointer ke array
    int size;       // jumlah total elemen
    int current;    // posisi saat ini
} IntIterator;

Iterator menyediakan dua fungsi utama. has_next() memeriksa apakah masih ada elemen yang dapat dibaca, dan next() mengembalikan elemen saat ini lalu memajukan posisi:

int has_next(IntIterator* it) {
    return it->current < it->size;
}

int next(IntIterator* it) {
    return it->data[it->current++];
}

Menggunakan iterator terlihat rapi dan menyembunyikan detail array:

IntIterator it = create_iterator(numbers, 5);
while (has_next(&it)) {
    printf("%d\n", next(&it));
}

Pemanggil tidak perlu tahu bahwa numbers adalah array atau cara kerja pengindeksan. Abstraksi ini memudahkan kamu mengubah struktur data yang mendasarinya nanti, misalnya dari array menjadi linked list, tanpa mengubah kode yang menggunakan iterator.

challenge icon

Tantangan

Mudah

Mari buat iterator NumberList: abstraksi yang rapi sehingga kamu bisa menelusuri kumpulan bilangan bulat tanpa mengungkap struktur array yang mendasarinya.

Kamu akan mengatur kodemu dalam tiga file:

  • iterator.h: Definisikan struct IntIterator yang menyimpan pointer ke array bilangan bulat, ukuran total kumpulan, dan posisi saat ini. Deklarasikan tiga fungsi: create_iterator (menerima pointer array dan ukuran, lalu mengembalikan iterator yang telah diinisialisasi), has_next (memeriksa apakah masih ada elemen), dan next (mengembalikan elemen saat ini lalu memajukan posisi). Jangan lupa guard untuk mencegah penyertaan berulang!
  • iterator.c: Implementasikan fungsi-fungsi iterator. Fungsi create_iterator harus mengembalikan IntIterator sebagai nilai dengan posisi saat ini diatur ke 0. Fungsi has_next mengembalikan 1 jika masih ada elemen untuk dibaca, dan 0 jika tidak. Fungsi next mengembalikan elemen pada posisi saat ini, lalu menambah posisi.
  • main.c: Baca jumlah elemen, lalu baca setiap nilai bilangan bulat ke dalam array. Buat iterator untuk array ini, lalu gunakan perulangan while dengan has_next dan next untuk menelusuri dan mencetak setiap elemen pada barisnya sendiri.

Programmu akan menerima:

  1. Jumlah elemen dalam array
  2. Setiap nilai bilangan bulat pada baris terpisah

Gunakan pola iterator untuk mencetak semua elemen: jangan mengakses indeks array secara langsung dalam perulangan penelusuranmu!

Contoh output saat inputnya adalah 4, lalu 10, 20, 30, 40:

10
20
30
40

Contoh output saat inputnya adalah 3, lalu -5, 0, 100:

-5
0
100

Contoh output saat inputnya adalah 1, lalu 42:

42

Iterator menyembunyikan cara penyimpanan data. Perulangan utama cukup menanyakan "apakah masih ada?" dan "berikan yang berikutnya" tanpa mengetahui apa pun tentang indeks array atau tata letak memori.

Coba sendiri

#include <stdio.h>
#include "iterator.h"

int main() {
    int n;
    scanf("%d", &n);
    
    int arr[n];
    
    // TODO: Baca n nilai bilangan bulat ke dalam array
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    
    // TODO: Buat iterator untuk array
    
    // TODO: Gunakan while loop dengan has_next dan next untuk menelusuri
    // dan cetak setiap elemen pada baris tersendiri
    // JANGAN gunakan pengindeksan array secara langsung dalam loop penelusuranmu!
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online