Indexer pada Bahasa Pemrograman C#

Indexer pada Bahasa Pemrograman C#
Photo by Campaign Creators / Unsplash

Dalam C#, indexer adalah fitur yang memungkinkan objek diperlakukan seperti array. Dengan menggunakan indexer, kita bisa mengakses elemen dalam class menggunakan operator indeks ([]), mirip dengan array atau koleksi lainnya.

Artikel ini akan membahas apa itu indexer dalam C#, bagaimana cara menggunakannya, serta contoh implementasi dalam berbagai skenario pemrograman.

1. Apa Itu Indexer dalam C#?

Indexer memungkinkan sebuah objek untuk mengakses elemen internal dengan sintaks mirip array tanpa harus membuat method tambahan seperti GetItem() atau SetItem().

Sintaks Dasar Indexer

class NamaClass {
    private tipe[] array = new tipe[jumlah_elemen];
    
    public tipe this[int index] {
        get { return array[index]; }
        set { array[index] = value; }
    }
}
  • this[int index] → Mendefinisikan indexer yang menerima indeks bertipe integer.
  • get → Mengembalikan nilai pada indeks tertentu.
  • set → Mengatur nilai pada indeks tertentu.

2. Contoh Penggunaan Indexer dalam C#

2.1 Indexer Sederhana dalam Class

using System;

class Buku {
    private string[] daftarBuku = new string[5];
    
    public string this[int index] {
        get { return daftarBuku[index]; }
        set { daftarBuku[index] = value; }
    }
}

class Program {
    static void Main() {
        Buku koleksi = new Buku();
        
        koleksi[0] = "C# Programming";
        koleksi[1] = "Data Structures";
        
        Console.WriteLine("Buku pertama: " + koleksi[0]);
        Console.WriteLine("Buku kedua: " + koleksi[1]);
    }
}

Output:

Buku pertama: C# Programming
Buku kedua: Data Structures

Penjelasan:

  • Indexer memungkinkan objek Buku diperlakukan seperti array.
  • koleksi[0] = "C# Programming"; → Mengisi elemen pertama.
  • Console.WriteLine(koleksi[0]); → Mengakses nilai yang tersimpan dalam index pertama.

2.2 Indexer dengan Validasi Input

Kita bisa menambahkan validasi dalam set untuk menghindari kesalahan akses indeks.

class KoleksiBuku {
    private string[] buku = new string[3];
    
    public string this[int index] {
        get {
            if (index < 0 || index >= buku.Length) {
                return "Indeks di luar batas!";
            }
            return buku[index];
        }
        set {
            if (index >= 0 && index < buku.Length) {
                buku[index] = value;
            } else {
                Console.WriteLine("Error: Indeks di luar batas!");
            }
        }
    }
}

class Program {
    static void Main() {
        KoleksiBuku koleksi = new KoleksiBuku();
        koleksi[0] = "C# Dasar";
        koleksi[3] = "Java Dasar"; // Akan menghasilkan error
        
        Console.WriteLine(koleksi[0]);
        Console.WriteLine(koleksi[3]); // Akan menampilkan pesan error
    }
}

Output:

Error: Indeks di luar batas!
C# Dasar
Indeks di luar batas!

Penjelasan:

  • Jika indeks berada di luar batas array, akan ditampilkan pesan kesalahan.
  • Ini berguna untuk mencegah akses ke elemen yang tidak tersedia.

3. Menggunakan Indexer dengan String Key

Selain indeks numerik, kita juga bisa menggunakan string sebagai indeks dalam indexer.

using System;
using System.Collections.Generic;

class Kontak {
    private Dictionary<string, string> kontakList = new Dictionary<string, string>();
    
    public string this[string nama] {
        get {
            return kontakList.ContainsKey(nama) ? kontakList[nama] : "Kontak tidak ditemukan";
        }
        set {
            kontakList[nama] = value;
        }
    }
}

class Program {
    static void Main() {
        Kontak kontak = new Kontak();
        
        kontak["Budi"] = "08123456789";
        kontak["Siti"] = "08987654321";
        
        Console.WriteLine("Nomor Budi: " + kontak["Budi"]);
        Console.WriteLine("Nomor Andi: " + kontak["Andi"]); // Tidak ada dalam daftar
    }
}

Output:

Nomor Budi: 08123456789
Kontak tidak ditemukan

Penjelasan:

  • Menggunakan Dictionary<string, string> sebagai penyimpanan data.
  • Indexer menggunakan string sebagai kunci untuk mengakses data.
  • Jika kontak tidak ditemukan, akan menampilkan pesan kesalahan.

4. Kapan Harus Menggunakan Indexer?

Gunakan indexer jika:

  • Ingin membuat class yang dapat diakses dengan sintaks array.
  • Membutuhkan cara mudah untuk mengakses koleksi data tanpa harus memanggil method.
  • Ingin mendukung akses berdasarkan indeks numerik atau string seperti dictionary.

Jangan gunakan indexer jika:

  • Koleksi data bisa lebih jelas dengan method tradisional.
  • Tidak memerlukan fleksibilitas akses dengan sintaks [].

5. Kesimpulan

  • Indexer memungkinkan objek dalam C# diperlakukan seperti array.
  • Dapat digunakan dengan indeks numerik atau string.
  • Bisa digunakan dalam validasi input untuk mencegah akses indeks yang tidak valid.
  • Sangat berguna dalam koleksi data seperti list dan dictionary.

Dengan memahami indexer dalam C#, Anda bisa membuat class yang lebih fleksibel dan mudah digunakan dalam berbagai skenario pemrograman!

Read more