Menu
CoddyTech

Indexer (this[])

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 37 dari 70.

Indexer memungkinkan kamu mengakses elemen dalam class-mu menggunakan notasi tanda kurung siku seperti pada array. Alih-alih memanggil method seperti collection.GetItem(0), kamu bisa menulis collection[0] yang lebih intuitif.

Kamu mendefinisikan indexer menggunakan kata kunci this dengan tanda kurung siku:

public class Sentence
{
    private string[] words;
    
    public Sentence(string text)
    {
        words = text.Split(' ');
    }
    
    public string this[int index]
    {
        get { return words[index]; }
        set { words[index] = value; }
    }
}

Sekarang kamu dapat mengakses kata-kata secara alami:

Sentence s = new Sentence("Hello World");
Console.WriteLine(s[0]);  // Hello
s[1] = "C#";
Console.WriteLine(s[1]);  // C#

Indexer tidak terbatas pada bilangan bulat. Kamu dapat menggunakan tipe apa pun sebagai parameter indeks, sehingga berguna untuk akses seperti dictionary:

public string this[string key]
{
    get { return dictionary[key]; }
    set { dictionary[key] = value; }
}

Seperti property, indexer bisa bersifat hanya-baca (hilangkan setter) atau menyertakan logika validasi dalam accessor-nya. Indexer cocok digunakan saat class-mu membungkus collection atau saat notasi tanda kurung siku membuat kodemu lebih mudah dibaca.

challenge icon

Tantangan

Mudah

Mari buat class Playlist yang memungkinkan kamu mengakses lagu menggunakan notasi kurung siku yang intuitif, seperti saat bekerja dengan array. Kamu akan membuat playlist musik yang lagunya dapat diambil dan diperbarui berdasarkan posisinya menggunakan indexer.

Kamu akan mengatur kodemu dalam dua file:

  • Playlist.cs: Buat class Playlist dalam namespace Music yang membungkus koleksi lagu internal dan menyediakan akses seperti array melalui indexer. Playlist-mu harus memiliki:
    • array string privat untuk menyimpan judul lagu
    • constructor yang menerima string berisi judul lagu yang dipisahkan koma, lalu memisahkannya ke dalam array internal
    • indexer yang menggunakan this[int index] dan memungkinkan kamu mengambil serta mengatur lagu pada posisi tertentu
    • property hanya-baca Count yang mengembalikan jumlah lagu dalam playlist
    • method GetAllSongs() yang mengembalikan semua lagu yang digabungkan dengan " | "
  • Program.cs: Di file utama, buat playlist dari input, lalu gunakan indexer untuk mengakses dan mengubah lagu. Tunjukkan cara membaca lagu berdasarkan indeks dan memperbarui lagu pada posisi tertentu.

Kamu akan menerima tiga input:

  • Daftar judul lagu yang dipisahkan koma (misalnya, Song A,Song B,Song C)
  • Indeks yang akan diambil (integer)
  • Judul lagu baru untuk menggantikan lagu pada indeks yang sama

Cetak output dengan format ini:

Total songs: {Count}
Song at index {index}: {song title}
After update: {GetAllSongs()}

Misalnya, jika inputnya adalah Rock Anthem,Jazz Vibes,Pop Hit, 1, dan Blues Classic, outputnya akan menjadi:

Total songs: 3
Song at index 1: Jazz Vibes
After update: Rock Anthem | Blues Classic | Pop Hit

Perhatikan bahwa indexer memungkinkan kamu mengakses playlist[1] untuk mendapatkan "Jazz Vibes", lalu menetapkan playlist[1] = "Blues Classic" untuk memperbaruinya. Cara ini jauh lebih alami daripada memanggil method seperti GetSongAt(1) atau SetSongAt(1, "Blues Classic")!

Coba sendiri

using System;
using Music;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input
        string songList = Console.ReadLine();
        int index = Convert.ToInt32(Console.ReadLine());
        string newSong = Console.ReadLine();

        // TODO: Buat object Playlist dari songList

        // TODO: Cetak jumlah total lagu menggunakan property Count

        // TODO: Cetak lagu pada indeks yang diberikan menggunakan indexer

        // TODO: Perbarui lagu pada indeks yang diberikan menggunakan indexer

        // TODO: Cetak semua lagu setelah diperbarui menggunakan GetAllSongs()
    }
}
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