Saturday, December 24, 2016

Bab 6. Pemrograman C# Belajar Dari Contoh



6. Array dan String







Bab ini akan kembali mendiskusikan mengenai tipe data, array dan string. Loop foreach juga akan dibahas secara detil.


Array
Array adalah sekumpulan variabel bertipe sama yang bisa dirujuk dengan nama sama. Dalam C#, array dapat memiliki satu atau lebih dimensi. Array dipakai untuk berbagai kepentingan karena banyak kasus melibatkan pengelompokan variabel-variabel berelasi. Sebagai contoh, Anda bisa menggunakan array untuk menampung data suhu bulanan, data harga saham, dan lainnya.

Keuntungan utama dari array adalah ia mengorganisir data sedemikian rupa sehingga data dengan mudah dapat dimanipulasi. Sebagai contoh, jika Anda mempunyai array yang memuat data pendapatan tiap rumah tangga di sebuah desa, maka Anda dapat dengan mudah mencari pendapatan rata-rata hanya dengan menjelajah array. Di samping itu, array juga mengorganisir data sedemikian rupa sehingga data dapat dengan mudah diurutkan.

Meskipun array dalam C# dapat dipakai seperti array dalam banyak bahasa pemrograman, perbedaannya adalah array dalam C# diimplementasikan sebagai objek. Inilah alasan mengapa array dibahas setelah objek dikenalkan pada buku ini. Dengan mengimplementasikan array sebagai objek, beberapa keuntungan bisa diperoleh, salah satunya adalah bahwa array yang sudah tidak dipakai akan dikumpulkan oleh kolektor sampah.


Array Satu Dimensi
Array satu dimensi adalah sebuah daftar yang memuat beberapa variabel berelasi. Daftar semacam itu umum dijumpai dalam pemrograman. Sebagai contoh, Anda bisa memakai array satu dimensi untuk menyimpan nomor akun pengguna di dalam sebuah jaringan.

Karena array dalam C# diimplementasikan sebagai objek, dua langkah dibutuhkan untuk menggunakan array dalam program Anda. Pertama, Anda harus mendeklarasikan sebuah variabel yang menunjuk ke array tersebut. Kedua, Anda harus menciptakan sebuah instans dari array menggunakan operator new. Oleh karena itu, untuk mendeklarasikan sebuah array satu dimensi, Anda akan menggunakan bentuk umum ini:

tipe[ ] nama-array = new tipe[ukuran];


Di sini, tipe mendeklarasikan tipe elemen dari array. Tipe elemen menentukan tipe data setiap elemen yang dimuat array. Perhatikan kurung siku yang mengikuti tipe. Kurung siku tersebut mengindikasikan bahwa sebuah array satu dimensi sedang dideklarasikan. Jumlah elemen yang bisa dimuat array ditentukan oleh ukuran.

Berikut adalah contohnya. Statemen ini menciptakan sebuah array int yang beranggotakan 10 elemen dan menghubungkannya dengan variabel referensi bernama sampel:

int[] sampel = new int[10];

Variabel sampel menampung sebuah referensi yang menunjuk ke memori yang dialokasikan oleh new. Memori ini cukup besar untuk menampung sepuluh elemen bertipe int.

Sama seperti kasus dalam menciptakan instans dari sebuah kelas, Anda dimungkinkan untuk memecah statemen sebelumnya menjadi dua. Sebagai contoh,

int[] sampel;
sampel = new int[10];

Pada kasus ini, ketika sampel pertama kali diciptakan, ia tidak merujuk ke objek fisik apapun. Variabel referensi sampel pada statemen kedua, setelah dieksekusi, akan menunjuk ke sebuah array satu dimensi.

Elemen individu di dalam sebuah array bisa diakses menggunakan indeks. Indeks mendeskripsikan posisi elemen di dalam array. Dalam C#, semua array mempunyai 0 sebagai indeks bagi elemen pertama. Karena sampel mempunyai 10 elemen, indeksnya mulai dari 0 sampai 9. Untuk mengindeks sebuah array, Anda perlu menspesifikasi jumlah elemen yang diinginkan, diapit oleh sepasang kurung siku. Jadi, elemen pertama dalam sampel adalah sampel[0], dan elemen terakhir adalah sampel[9]. Sebagai contoh, program berikut mengisi sampel dengan angka 0 sampai 9:

// Demonstrasi array satu dimensi.
using System;

class DemoArray {
    static void Main() {
        int[] sampel = new int[10];
        int i;

        for (i = 0; i < 10; i = i + 1)
            sampel[i] = i;

        for (i = 0; i < 10; i = i + 1)
            Console.WriteLine("sampel[" + i + "]: " + sampel[i]);
    }
}

Keluaran program ditunjukkan di sini:

sampel[0]: 0
sampel[1]: 1
sampel[2]: 2
sampel[3]: 3
sampel[4]: 4
sampel[5]: 5
sampel[6]: 6
sampel[7]: 7
sampel[8]: 8
sampel[9]: 9

Secara konseptual, array sampel tampak seperti ini:


Array umum dijumpai dalam pemrograman karena Anda dapat dengan mudah menangani sejumlah besar variabel berelasi menggunakan array. Sebagai contoh, program berikut mencari rerata dari sekelompok nilai yang disimpan dalam array nilai menggunakan loop for:

// Menghitung rerata dari sekelompok nilai.
using System;

class Rerata {
    static void Main() {
        int[] nilai = new int[10];

        int rerata = 0;

        nilai[0] = 99;
        nilai[1] = 10;
        nilai[2] = 100;
        nilai[3] = 18;
        nilai[4] = 78;
        nilai[5] = 23;
        nilai[6] = 63;
        nilai[7] = 9;
        nilai[8] = 87;
        nilai[9] = 49;

        for (int i = 0; i < 10; i++)
            rerata = rerata + nilai[i];

        rerata = rerata / 10;

        Console.WriteLine("Rerata: " + rerata);
    }
}

Keluaran program ditunjukkan di sini:

Rerata: 53


Menginisialisasi Array

Pada program sebelumnya, array nilai diberikan nilai secara manual, menggunakan sepuluh statemen penugasan terpisah. Ada cara yang lebih baik untuk melakukan hal itu. Array dapat diinisialisasi ketika diciptakan. Bentuk umum untuk menginisialisasi sebuah array satu dimensi ditunjukkan di sini:

tipe[ ] nama-array = { nil1, nil2, nil3, ..., nilN };

Di sini, nilai-nilai awal dispesifikasi melalui nil1 sampai nilN. C# secara otomatis mengalokasikan sebuah array yang cukup besar untuk menampung penginisialisasi yang Anda spesifikasi. Tidak perlu digunakan operator new secara eksplisit. Sebagai contoh, berikut adalah cara lebih baik untuk menulis program Rerata:

// Menghitung rerata dari sekelompok nilai.
using System;

class Rerata
{
    static void Main()
    {
        int[] nilai = { 99, 10, 100, 18, 78, 23,
                        63, 9, 87, 49 };
        int rerata = 0;
       
        for (int i = 0; i < 10; i++)
            rerata = rerata + nilai[i];
       
        rerata = rerata / 10;
       
        Console.WriteLine("Rerata: " + rerata);
    }
}

Anda dapat menggunakan new ketika menginisialisasi sebuah array. Sebagai contoh, berikut adalah cara yang benar, meski berlebihan, untuk menginisialisasi nilai:

int[] nilai = new int[] { 99, 10, 100, 18, 78, 23,
                         63, 9, 87, 49 };

Meskipun berlebihan, format new dari inisialisasi array berguna ketika Anda menugaskan sebuah array baru kepada variabel referensi array yang sudah ada. Sebagai contoh:

int[] nilai;
nilai = new int[] { 99, 10, 100, 18, 78, 23,
                   63, 9, 87, 49 };

Pada kasus ini, nilai dideklarasikan pada statemen pertama dan diinisialisasi oleh statemen kedua.

Satu hal penting terakhir: Adalah diijinkan untuk menspesifikasi ukuran array secara eksplisit ketika menginisialisasi sebuah array, tetapi ukurannya harus sesuai dengan jumlah penginisialisasi. Sebagai contoh, berikut adalah cara lain dalam menginisialisasi nilai:

int[] nilai = new int[10] { 99, 10, 100, 18, 78, 23,
                           63, 9, 87, 49 };

Pada deklarasi ini, ukuran dari nilai secara eksplisit dinyatakan sebesar 10.
Batas Array
Batas array secara tegas diterapkan dalam C#; akan terjadi error jika melebihi batas array. Jika Anda ingin memastikan hal ini, Anda bisa mencoba program berikut yang mengakses ke luar batas array:

// Demonstrasi melebihi batas array.
using System;

class ArrayErr {
    static void Main() {
        int[] sampel = new int[10];
        int i;
      
        // Mengakses di luar batas array.
        for (i = 0; i < 100; i = i + 1)
            sampel[i] = i;
    }
}

Ketika i mencapai 10, IndexOutOfRangeException dibangkitkan dan program dihentikan secara mendadak. (Lihat Bab 12 untuk diskusi tentang penanganan eksepsi).


Array Multidimensi
Meskipun array satu dimensi merupakan array yang paling umum dipakai dalam pemrograman, array multidimensi tidak jarang pula digunakan. Array multidimensi merupakan array mempunyai dua atau lebih dimensi, dan setiap elemen individu diakses dengan kombinasi dari dua atau lebih indeks.


Array Dua Dimensi
Bentuk paling sederhana dari array multidimensi adalah array dua dimensi. Dalam array dua dimensi, lokasi dari elemen tertentu dispesifikasi dengan dua indeks. Anda bisa berimajinasi bahwa array dua dimensi seperti tabel informasi, dimana satu indeks mengindikasikan baris dan indeks lainnya mengindikasikan kolom. Untuk mendeklarasikan sebuah array integer dua dimensi, tabel, yang berukuran 10x20, Anda bisa menuliskan

int[,] tabel = new int[10, 20];

Perhatikan secara khusus pada deklarasi tersebut. Perhatikan bahwa kedua dimensi dipisahkan dengan koma. Pada bagian pertama dari deklarasi, sintaks

[,]

mengindikasikan bahwa sebuah variabel referensi array dua dimensi sedang diciptakan. Agar memori menggunakan new untuk array dialokasikan, sintaks ini digunakan:

int[10, 20]

Ini menciptakan sebuah array 10x20, dan koma memisahkan antar dimensi.

Untuk mengakses sebuah elemen di dalam array dua dimensi, Anda harus menspesifikasi kedua indeks yang dipisahkan dengan koma. Sebagai contoh, untuk menugaskan nilai 10 pada lokasi 3,5 pada array tabel, Anda bisa menggunakan

tabel[3, 5] = 10;

Berikut diberikan contoh utuh, yang mengisi sebuah array dua dimensi dengan angka 1 sampai 12 dan kemudian menampilkan isi array tersebut:

// Demonstrasi sebuah array dua dimensi.
using System;

class DuaD {
    static void Main() {
        int t, i;
        int[,] tabel = new int[3, 4];

        for (t = 0; t < 3; ++t)
        {
            for (i = 0; i < 4; ++i)
            {
                tabel[t, i] = (t * 4) + i + 1;
                Console.Write(tabel[t, i] + " ");
            }
           
            Console.WriteLine();
        }
    }
}

Pada contoh ini, tabel[0, 0] akan memiliki nilai 1, tabel[0, 1] nilai 2, tabel[0, 3] nilai 3, dan seterusnya. Nilai dari tabel[3, 2] adalah 12. Secara konseptual, array akan tampak seperti yang ditunjukkan pada Gambar 6.1.


Gambar 6.1 Representasi konseptual atas array tabel yang diciptakan oleh program DuaD


Array Tiga Atau Lebih Dimensi
C# mengijinkan array memiliki lebih dari dua dimensi. Berikut adalah format umum deklarasi sebuah array multidimensi:

tipe[, ...,] nama = new tape[ukuran1, ukuran2, ..., ukuranN];
Sebagai contoh, deklarasi berikut menciptakan sebuah array integer tiga dimensi berukuran 4x10x3:

int[,,] multidim = new int[4, 10, 3];

Untuk menugasi elemen 2, 4, 1 dari multidim dengan nilai 100, gunakan statemen ini:

multidim[2, 4, 1] = 100;

Berikut adalah sebuah program yang menggunakan sebuah array tiga dimensi yang menampung matriks nilai 3x3x3. Program kemudian menjumlahkan nilai pada salah satu diagonal kubik.

// Menujumlahkan nilai-nilai pada sebuah diagonal matriks 3x3x3.
using System;

class Matriks3D {
    static void Main() {
        int[, ,] m = new int[3, 3, 3];
        int jum = 0;
        int n = 1;

        for (int x = 0; x < 3; x++)
            for (int y = 0; y < 3; y++)
                for (int z = 0; z < 3; z++)
                    m[x, y, z] = n++;
        jum = m[0, 0, 0] + m[1, 1, 1] + m[2, 2, 2];
        Console.WriteLine("Penjumlahan atas diagonal: " + jum);
    }
}

Keluaran program ditunjukkan di sini:

Penjumlahan atas diagonal: 42


Menginisialisasi Array Multidimensi
Array multidimensi dapat diinisialisasi dengan mengapit daftar penginisialisasi pada tiap dimensi menggunakan kurung kurawal. Sebagai contoh, format umum inisialisasi array dua dimensi ditunjukkan di sini:

tipe[,] nama_array = {
  { nil, nil, nil, ..., nil },
  { nil, nil, nil, ..., nil },
  ...
  { nil, nil, nil, ..., nil }
};

Di sini, nil mengindikasikan sebuah nilai inisialiasasi. Setiap blok sebelah dalam mengindikasikan sebuah baris. Dalam setiap baris, nilai pertama disimpan pada posisi pertama, nilai kedua pada posisi kedua, dan seterusnya. Perhatikan bahwa koma memisahkan blok penginisialisasi dan bahwa titik koma ditempatkan setelah kurung kurawal penutup }.

Sebagai contoh, program berikut menginisialisasi sebuah array bernama kuadrat, yang menampilkan setiap elemen dan kuadra dari tiap elemennya:
// Menginisialisasi array dua dimensi.
using System;

class Kuadrat
{
    static void Main()
    {
        int[,] kuadrat = {
          { 1, 1 },
          { 2, 4 },
          { 3, 9 },
          { 4, 16 },
          { 5, 25 },
          { 6, 36 },
          { 7, 49 },
          { 8, 64 },
          { 9, 81 },
          { 10, 100 }
    };
        int i, j;
       
        for (i = 0; i < 10; i++)
        {
            for (j = 0; j < 2; j++)
                Console.Write(kuadrat[i, j] + " ");
            Console.WriteLine();
        }
    }
}

Keluaran program ditunjukkan di sini:

1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100


Array Jagged
Pada beberapa contoh sebelumnya, ketika Anda menciptakan sebuah array dua dimensi, Anda menciptakan apa yang dinamakan dengan array persegi-panjang. Array persegi-panjang seperti tabel, dimana panjang setiap baris sama. Namun, C# juga mengijinkan Anda untuk menciptakan suatu tipe spesial dari array dua dimensi, yang dikenal dengan array jagged. Array jagged merupakan array yang memuat beberapa array, dimana di dalamnya panjang setiap array bisa berbeda satu sama lain. Jadi, array jagged dapat dipakai untuk menciptakan tabel dimana di dalamnya panjang baris tidak sama.

Array jagged dideklarasikan menggunakan beberapa pasang kurung siku untuk mengindikasikan setiap dimensi. Sebagai contoh, untuk mendeklarasikan sebuah array jagged dua dimensi, Anda dapat menggunakan format umum ini:

tipe[ ] [ ] nama-array = new tipe[ukuran][ ];

Di sini, ukuran mengindikasikan jumlah baris di dalam array. Baris sendiri belum dialokasikan dan dialokasikan secara individual. Ini memampukan Anda untuk menetapkan setiap baris berbeda dari bari lainnya. Sebagai contoh, kode berikut mengalokasikan memori untuk dimensi pertama array jagged ketika dideklarasikan. Kode kemudian mengalokasikan dimensi kedua secara manual.

int[][] jagged = new int[3][];
jagged[0] = new int[4];
jagged[1] = new int[3];
jagged[2] = new int[5];

Setelah deret statemen tersebut dieksekusi, array jagged akan tampak seperti ini:





Begitu array jagged diciptakan, elemennya dapat diakses dengan menspesifikasi setiap indeks di dalam kurung siku. Sebagai contoh, untuk menugaskan nilai 10 kepada elemen 2,1 pada array jagged, Anda bisa menggunakan statemen ini:

jagged[2][1] = 10;

Program berikut mendemonstrasikan penciptaan sebuah array jagged dua dimensi:

// Demonstrasi array jagged.
using System;

class Jagged {
  static void Main() {
    int[][] jagged = new int[3][];
    jagged[0] = new int[4];
    jagged[1] = new int[3];
    jagged[2] = new int[5];
    int i;

    // Menyimpan nilai-nilai dalam array pertama.
    for(i=0; i < 4; i++)
      jagged[0][i] = i;

    // Menyimpan nilai-nilai dalam array kedua.
    for(i=0; i < 3; i++)
      jagged[1][i] = i;

    // Menyimpan nilai-nilai dalam array ketiga.
    for (i = 0; i < 5; i++)
      jagged[2][i] = i;

    // Menampilkan nilai-nilai pada array pertama.
    for (i = 0; i < 4; i++)
      Console.Write(jagged[0][i] + " ");
    Console.WriteLine();

    // Menampilkan nilai-nilai pada array kedua.
    for (i = 0; i < 3; i++)
      Console.Write(jagged[1][i] + " ");
    Console.WriteLine();

    // Menampilkan nilai-nilai pada array ketiga.
    for (i = 0; i < 5; i++)
      Console.Write(jagged[2][i] + " ");
    Console.WriteLine();
  }
}

Keluaran program ditampilkan di sini:

0 1 2 3
0 1 2
0 1 2 3 4

Array jagged tidak digunakan pada semua terapan, tetapi bisa efektif pada beberapa situasi. Sebagai contoh, jika membutuhkan sebuah array dua dimensi yang berukuran sangat besar, tetapi berpopulasi jarang, maka array jagged bisa menjadi solusi tepat.

Satu hal penting terakhir: Karena array jagged adalah array yang memuat array, maka tidak ada batasan bahwa array berupa array satu dimensi. Sebagai contoh, statemen berikut menciptakan array yang memuat beberapa array dua dimensi:

int[][,] jagged = new int[3][,];

Statemen berikutnya menugaskan sebuah referensi yang menunjuk ke suatu array berukuran 4x2 kepada jagged[0]:

jagged[0] = new int[4, 2];

Statemen berikut menugaskan sebuah nilai kepada jagged[0][1]:

jagged[0][1,0] = i;


Menugaskan Referensi Array
Sama seperti objek lainnya, ketika Anda menugaskan variabel referensi array satu kepada lainnya, Anda hanya membuat kedua variabel tersebut merujuk ke array yang sama. Anda tidak menyebabkan penyalinan array, atau Anda juga tidak menyebabkan isi dari satu array disalin ke array lain. Sebagai contoh, perhatikan program ini:

// Menugaskan variabel referensi array.
using System;

class MenugaskanRef {
    static void Main() {
        int i;

        int[] angka1 = new int[10];
        int[] angka2 = new int[10];

        for (i = 0; i < 10; i++) angka1[i] = i;

        for (i = 0; i < 10; i++) angka2[i] = -i;

        Console.Write("Berikut adalah angka1: ");
        for (i = 0; i < 10; i++)
            Console.Write(angka1[i] + " ");
        Console.WriteLine();
       
        Console.Write("Berikut adalah angka2: ");
        for (i = 0; i < 10; i++)
            Console.Write(angka2[i] + " ");
        Console.WriteLine();

        angka2 = angka1; // sekarang angka2 merujuk ke angka1
       
        Console.Write("Berikut adalah angka2 setelah penugasan: ");
        for (i = 0; i < 10; i++)
            Console.Write(angka2[i] + " ");
        Console.WriteLine();
       
        // Berikutnya, beroperasi pada angka1 melalui angka2.
        angka2[3] = 99;
      
        Console.Write("Berikut adalah angka1 setelah perubahan lewat angka2: ");
        for (i = 0; i < 10; i++)
            Console.Write(angka1[i] + " ");
        Console.WriteLine();
    }
}

Berikut adalah keluaran program:

Berikut adalah angka1: 0 1 2 3 4 5 6 7 8 9
Berikut adalah angka2: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9
Berikut adalah angka2 setelah penugasan: 0 1 2 3 4 5 6 7 8 9
Berikut adalah angka1 setelah perubahan lewat angka2: 0 1 2 99 4 5 6 7 8 9

Seperti ditunjukkan pada keluaran, setelah penugasan angka1 kepada angka1, kedua variabel referensi merujuk ke objek yang sama.


Menggunakan Properti Length
Sejumlah keuntungan didapatkan karena C# mengimplementasikan array sebagai objek. Salah satu keuntungan yang didapatkan berkaitan dengan properti Length yang memuat jumlah elemen yang dapat ditampung suatu array. Berikut adalah sebuah program yang mendemonstrasikan properti ini:

// Menggunakan properti Length.
using System;

class DemoLength
{
    static void Main()
    {
        int[] angka = new int[10];

        Console.WriteLine("Panjang array angka adalah " + angka.Length);
       
        // Menggunakan Length untuk menginisialisasi angka.
        for (int i = 0; i < angka.Length; i++)
            angka[i] = i * i;
       
        // Sekarang menggunakan Length untuk menampilkan angka.
        Console.Write("Berikut adalah array angka: ");
        for (int i = 0; i < angka.Length; i++)
            Console.Write(angka[i] + " ");
      
        Console.WriteLine();
    }
}

Program ini menampilkan keluaran berikut:

Panjang array angka adalah 10
Berikut adalah array angka: 0 1 4 9 16 25 36 49 64 81

Dalam DemoLength, perhatikan cara dimana angka.Length digunakan oleh beberapa loop for dalam mengatur jumlah iterasi yang akan dilakukan. Karena setiap array membawa panjangnya sendiri, Anda bisa menggunakan informasi ini, daripada harus secara manual menjejak ukuran array. Ingat bahwa nilai dari Length tidak ada hubungannya dengan jumlah elemen aktual yang sedang digunakan. Length memuat jumlah elemen yang mampung ditampung oleh sebuah array.

Total jumlah elemen juga bisa dijadikan nilai balik. Sebagai contoh:

// Mengunakan properti array Length pada array 3D.
using System;

class DemoPanjang3D {
    static void Main() {
        int[, ,] angka = new int[10, 5, 6];
       
        Console.WriteLine("Panjang array angka adalah " + angka.Length);
    }
}

Program ini menampilkan keluaran berikut:

Panjang array angka adalah 300

Seperti dibuktikan pada keluaran, Length mendapatkan jumlah elemen yang dapat ditampung oleh array angka, yaitu 300 (10x5x6) pada kasus ini. Anda tidak dimungkinkan untuk menggunakan Length dalam mencari panjang dari dimensi tertentu.


Penggunaan properti Length dapat menyederhanakan banyak algoritma. Sebagai contoh, program berikut menggunakan Length untuk membalikkan isi sebuah array dengan menyalinnya dari belakang-ke-depan ke dalam array lain:

// Membalikkan sebuah array.
using System;

class SalinBalik {
    static void Main() {
        int i, j;
        int[] angka1 = new int[10];
        int[] angka2 = new int[10];

        for (i = 0; i < angka1.Length; i++) angka1[i] = i;
       
        Console.Write("Isi awal: ");
        for (i = 0; i < angka1.Length; i++)
            Console.Write(angka1[i] + " ");
       
        Console.WriteLine();
       
        // Menyalin secara terbalik dari angka1 ke angka2.
        if (angka2.Length >= angka1.Length) // memastikan angka2 cukup besar
            for (i = 0, j = angka1.Length - 1; i < angka1.Length; i++, j--)
                angka2[j] = angka1[i];
       
        Console.Write("Isi terbalik: ");
        for (i = 0; i < angka2.Length; i++)
            Console.Write(angka2[i] + " ");
       
        Console.WriteLine();
    }
}

Berikut adalah keluaran program:

Isi awal: 0 1 2 3 4 5 6 7 8 9
Isi terbalik: 9 8 7 6 5 4 3 2 1 0

Di sini, Length membantu dua fungsi penting. Pertama, Length dipakai untuk memastikan bahwa array target cukup besar dalam menampung isi array sumber. Kedua, Length menyediakan kondisi terminasi untuk loop for, yang melakukan penyalinan terbalik.


Menggunakan Length Dengan Array Jagged
Kasus khusus terjadi ketika Length dipakai pada array jagged. Pada situasi ini, dimungkinkan untuk mendapatkan panjang dari setiap array individual. Sebagai contoh, perhatikan program berikut, yang mensimulasikan aktifitas CPU pada sebuah jaringan dengan empat simpul:

// Demonstrasi Length pada array jagged.
using System;

class Jagged {
    static void Main() {
        int[][] simpul_jaringan = new int[4][];
        simpul_jaringan[0] = new int[3];
        simpul_jaringan[1] = new int[7];
        simpul_jaringan[2] = new int[2];
        simpul_jaringan[3] = new int[5];
       
        int i, j;
       
        // fabrikasi CPU.
        for (i = 0; i < simpul_jaringan.Length; i++)
            for (j = 0; j < simpul_jaringan[i].Length; j++)
                simpul_jaringan[i][j] = i * j + 70;
       
        Console.WriteLine("Total jumlah simpul jaringan: " +
                          simpul_jaringan.Length + "\n");
       
        for (i = 0; i < simpul_jaringan.Length; i++)
        {
            for (j = 0; j < simpul_jaringan[i].Length; j++)
            {
                Console.Write("penggunaan CPU pada simpul " + i +
                              " CPU " + j + ": ");
                Console.Write(simpul_jaringan[i][j] + "% ");
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}

Keluaran program ditunjukkan di sini:

Total jumlah simpul jaringan: 4

penggunaan CPU pada simpul 0 CPU 0: 70%
penggunaan CPU pada simpul 0 CPU 1: 70%
penggunaan CPU pada simpul 0 CPU 2: 70%

penggunaan CPU pada simpul 1 CPU 0: 70%
penggunaan CPU pada simpul 1 CPU 1: 71%
penggunaan CPU pada simpul 1 CPU 2: 72%
penggunaan CPU pada simpul 1 CPU 3: 73%
penggunaan CPU pada simpul 1 CPU 4: 74%
penggunaan CPU pada simpul 1 CPU 5: 75%
penggunaan CPU pada simpul 1 CPU 6: 76%

penggunaan CPU pada simpul 2 CPU 0: 70%
penggunaan CPU pada simpul 2 CPU 1: 72%

penggunaan CPU pada simpul 3 CPU 0: 70%
penggunaan CPU pada simpul 3 CPU 1: 73%
penggunaan CPU pada simpul 3 CPU 2: 76%
penggunaan CPU pada simpul 3 CPU 3: 79%
penggunaan CPU pada simpul 3 CPU 4: 82%

Perhatikan secara khusus tentang bagaimana Length dipakai pada array jagged, simpul_jaringan. Ingat, array jagged dua dimensi merupakan sebuah array yang memuat array. Jadi, ketika ekspresi

simpul_jaring.Length

digunakan, ekspresi tersebut mendapatkan jumlah array yang disimpan pada simpul_jaringan, yaitu bernilai empat pada kasus ini. Untuk mendapatkan panjang dari sembarang array individual pada array jagged, Anda bisa menggunakan ekspresi semacam ini:

simpul_jaring [0].Length

dimana, pada kasus ini, mendapatkan panjang dari array pertama.


Array Bertipe Implisit
Seperti yang telah dijelaskan pada Bab 2, C# 3.0 telah menambahkan kemampuan untuk mendeklarasikan variabel secara implisit menggunakan katakunci var. Tipe variabel semacam itu ditentukan oleh kompiler, bergantung pada tipe dari ekspresi penginisialisasian. Jadi, semua variabel bertipe implisit harus diinisialisasi. Menggunakan mekanisme yang sama, dimungkinkan untuk menciptakan array bertipe implisit. Array bertipe implisit digunakan pada kasus yang melibatkan LINQ.

Array bertipe implisit dideklarasikan menggunakan katakunci var, tetapi Anda tidak memberikan [ ] setelah var. Di samping itu, array semacam ini harus diinisialisasi karena tipe penginisialisasi berperan sebagai penentu tipe elemen array tersebut. Semua penginisialisasi harus bertipe sama atau bertipe kompatibel. Berikut adalah sebuah contoh dari sebuah array bertipe implisit:

var nilai = new[] { 1, 2, 3, 4, 5 };

Statemen ini menciptakan array int yang memuat lima elemen. Referensi yang menunjuk ke array tersebut ditugaskan kepada nilai. Jadi, tipe dari nilai adalah “array int” dan mempunyai lima elemen. Perhatikan bahwa var tidak diikuti dengan [ ]. Di samping itu, meskipun array sedang diinisialisasi, Anda harus mencantumkan new[ ]. Pencantuman ini tidak bersifat konteks pada kasus ini. Berikut adalah contoh lain, yang menciptakan sebuah array double dua dimensi:

var nilai = new[,] { {1.1, 2.2}, {3.3, 4.4},{ 5.5, 6.6} };

Pada kasus ini, nilai mempunyai dimensi 2x3.

Anda juga dapat mendeklarasikan array jagged bertipe implisit. Sebagai contoh, perhatikan program berikut:

// Demonstrasi array jagged bertipe implisit.
using System;

class Jagged {
    static void Main() {
       
        var jagged = new[] {
            new[] { 1, 2, 3, 4 },
            new[] { 9, 8, 7 },
            new[] { 11, 12, 13, 14, 15 }
        };
       
        for (int j = 0; j < jagged.Length; j++)
        {
            for (int i = 0; i < jagged[j].Length; i++)
                Console.Write(jagged[j][i] + " ");
           
            Console.WriteLine();
        }
    }
}

Program ini menghasilkan keluaran:

1 2 3 4
9 8 7
11 12 13 14 15

Perhatikan secara khusus pada deklarasi dari jagged:

var jagged = new[] {
    new[] { 1, 2, 3, 4 },
    new[] { 9, 8, 7 },
    new[] { 11, 12, 13, 14, 15 }

Perhatikan bagaimana new[ ] digunakan dalam dua cara. Pertama, ia menciptakan array yang memuat array. Kedua, ia menciptakan setiap array individual, berdasar pada jumlah dan tipe penginisialisasi. Seperti yang Anda harapkan, semua penginisialisasi pada array individual harus bertipe sama. Pendekatan ini dapat dipakai untuk mendeklarasikan sembarang array jagged bertipe implisit.


Loop foreach
Pada Bab 4, telah disebutkan bahwa C# mendefinisikan sebuah loop yang dinamakan foreach, tetapi diskusi dan penjelasan mengenai foreach dilakukan sekarang. Loop foreach dipakai untuk menjelajah elemen-elemen dari sebuah koleksi. Koleksi merupakan sekelompok objek. C# mendefinisikan beberapa tipe koleksi, salah satunya adalah array. Format umum dari foreach ditunjukkan di sini:

foreach(tipe loopvar in koleksi) statemen;

Di sini, tipe loopvar menspesifikasi tipe dan nama dari variabel iterasi. Variabel iterasi menerima nilai dari elemen berikutnya di dalam koleksi setiap kali loop foreach beriterasi. Koleksi yang sedang dijelajah dispesifikasi oleh koleksi, dimana, pada diskusi ini, adalah sebuah array. Jadi, tipe harus bertipe sama (kompatibel dengan) tipe elemen array. tipe dapat pula berupa var, dimana di dalamnya kompiler menentuka tipe berdasar pada tipe elemen array.

Berikut adalah bagaimana foreach bekerja. Ketika loop mulai dieksekusi, elemen pertama di dalam array didapatkan dan ditugaskan kepada loopvar. Setiap iterasi mendapatkan elemen berikutnya dari array dan menyimpannya di dalam loopvar. Loop berakhir ketika tidak ada lagi elemen yang didapatkan. Jadi, foreach beriterasi menjelajahi array elemen demi elemen, mulai awal sampai akhir.


Satu hal penting untuk diingat tentang foreach adalah bahwa variabel iterasi loopvar hanya bisa dibaca (read-only). Ini berarti bahwa Anda tidak bisa mengubah isi sebuah array dengan menugaskan sebuah nilai baru kepada variabel iterasi.

Berikut adalah contoh sederhana yang menggunakan foreach. Program ini menciptakan array integer dan menginisialisasinya. Program kemudian menampilkan isi array dan menghitung penjumlahan atas isi array.

// Menggunakan loop foreach.
using System;

class DemoForeach {
    static void Main() {
        int jum = 0;
        int[] nilai = new int[10];
       
        // Menginisialisasi array nilai.
        for (int i = 0; i < 10; i++)
            nilai[i] = i;
       
        // Menggunakan foreach untuk menampilkan dan menjumlahkan isi array.
        foreach (int x in nilai)
        {
            Console.WriteLine("Nilai adalah: " + x);
            jum += x;
        }

        Console.WriteLine("Penjumlahan: " + jum);
    }
}

Keluaran program ditampilkan di sini:

Nilai adalah: 0
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 6
Nilai adalah: 7
Nilai adalah: 8
Nilai adalah: 9
Penjumlahan: 45

Seperti ditunjukkan pada keluaran, foreach menjelajah sebuah array secara berurutan dari indeks terendah sampai indeks tertinggi. Meskipun loop foreach beriterasi sampai semua elemen di dalam suatu array dijelajahi, adalah hal yang memungkinkan untuk menghentikan loop foreach secara mendadak menggunakan statemen break. Sebagai contoh, program ini menjumlahkan hanya lima elemen pertama dari array nilai:

// Menggunakan break dalam loop foreach.
using System;

class DemoForeach {
    static void Main() {
        int jum = 0;
        int[] nilai = new int[10];

        // Menginisialisasi array nilai.
        for (int i = 0; i < 10; i++)
            nilai[i] = i;

        // Menggunakan foreach untuk menampilkan dan menjumlahkan isi array.
        foreach (int x in nilai)
        {
            Console.WriteLine("Nilai adalah: " + x);
            jum += x;
            if (x == 4) break; // menghentikan loop ketika 4 didapatkan
        }
       
        Console.WriteLine("Penjumlahan dari 5 elemen pertama: " + jum);
    }
}

Berikut adalah keluaran program:

Nilai adalah: 0
Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Penjumlahan dari 5 elemen pertama: 10

Terbukti bahwa loop foreach berhenti saat elemen kelima diraih. Loop foreach juga bisa diterapkan pada array multidimensi:

// Menggunakan foreach pada array multidimensi.
using System;

class DemoForeach2 {
  static void Main() {
    int jum = 0;
    int[,] nilai = new int[3,5];

    // Menginisialisasi array nilai.
    for (int i = 0; i < 3; i++)
      for (int j = 0; j < 5; j++)
        nilai[i, j] = (i + 1) * (j + 1);

    // Menggunakan foreach untuk menampilkan dan menjumlahkan isi array.
    foreach (int x in nilai)
    {
      Console.WriteLine("Nilai adalah: " + x);
      jum += x;
    }

    Console.WriteLine("Penjumlahan: " + jum);
  }
}

Keluaran program ditampilkan di sini:

Nilai adalah: 1
Nilai adalah: 2
Nilai adalah: 3
Nilai adalah: 4
Nilai adalah: 5
Nilai adalah: 2
Nilai adalah: 4
Nilai adalah: 6
Nilai adalah: 8
Nilai adalah: 10
Nilai adalah: 3
Nilai adalah: 6
Nilai adalah: 9
Nilai adalah: 12
Nilai adalah: 15
Penjumlahan: 90

Karena loop foreach hanya dapat menjelajah array secara sekuensial, dari awal sampai akhir, Anda mungkin berpikir kegunaan loop ini terbatas. Namun, hal itu salah. Banyak algoritma yang memerlukan mekanisme ini, salah satunya adalah pencarian. Sebagai contoh, program berikut menggunakan loop foreach untuk melakukan pencarian sebuah nilai di dalam array. Program berhenti jika nilai yang dicari ditemukan.

// Pencarian array menggunakan foreach.
using System;

class Search {
  static void Main() {
    int[] nilai = new int[10];
    int nil;
    bool ditemukan = false;

    // Menginisialisasi nilai.
    for(int i = 0; i < 10; i++)
      nilai[i] = i;
   
    nil = 5;

    // Menggunakan foreach untuk mencari kunci pada nilai.
    foreach (int x in nilai)
    {
      if (x == nil)
      {
        ditemukan = true;
        break;
      }
    }

    if (ditemukan)
      Console.WriteLine("Nilai ditemukan!");
  }
}

Keluaran program ditunjukkan di sini:

Nilai ditemukan!


String
Dari sudut pandang pemrograman, string merupakan salah satu tipe data terpenting dalam C# karena mendefinisikan dan mendukung string karakter. Dalam banyak bahasa pemrograman, string merupakan sebuah array karakter. Ini tidak terjadi pada C#. Dalam C#, string adalah objek. Jadi string bertipe referensi. Meskipun string merupakan salah satu tipe built-in dalam C#, diskusi tentang string harus disajikan setelah kelas dan objek dibahas.

Sebenarnya, Anda telah menggunakan kelas string sejak Bab 1, tetapi Anda tidak mengenalinya. Ketika Anda menciptakan sebuah literal string, Anda sebenarnya sedang menciptakan suatu objek string. Sebagai contoh, di dalam statemen

Console.WriteLine("Dalam C#, string adalah objek.");

string ”Dalam C#, string adalah objek” secara otomatis dijadikan sebuah objek string oleh C#. Jadi, Anda telah menggunakan string tanpa Anda sadari sejauh ini. Pada bagian ini, Anda akan belajar bagaimana menangani string secara eksplisit.


Menciptakan String
Cara termudah dalam menciptakan sebuah string adalah menggunakan literal string. Sebagai contoh, str berikut adalah suatu variabel referensi string yang ditugasi dengan sebuah referensi yang menunjuk ke literal string:

string str = "string C# sangat ampuh.";

Pada kasus ini, str diinisialisasi dengan runtun karakter “string C# sangat ampuh”. Anda juga dapat menciptakan sebuah string dari array char. Sebagai contoh,

char[] charray = {'t', 'e', 's', 't'};
string str = new string(charray);

Begitu Anda menciptakan sebuah objek string, Anda dapat menggunakannya dimana saja sebuah string terkutip diijinkan. Sebagai contoh, Anda dapat menggunakan sebuah objek string sebagai argumen bagi WriteLine(), seperti ditunjukkan pada contoh ini:

// Mengenalkan string.
using System;

class DemoString {
    static void Main() {
        char[] charray = { '1', ' ', 's', 't', 'r', 'i', 'n', 'g', '.' };
        string str1 = new string(charray);
        string str2 = "String lain.";
       
        Console.WriteLine(str1);
        Console.WriteLine(str2);
    }
}

Keluaran program ditunjukkan di sini:

1 string.
String lain.


Metode
Deskripsi
static int Compare(string strA, string strB,
             StringComparison tipePerbandingan)
Menghasilkan nilai balik kurang dari nol jika strA kurang dari strB, lebih dari nol jika strA lebih besar dari strB, dan nol jika kedua string sama. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerbandingan.

bool Equals(string nilai,
       StringComparison tipePerbandingan)
Menghasilkan nilai balik true jika string pemanggil sama dengan nilai. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerbandingan.

int IndexOf(char nilai)
Melakukan pencarian atas kemunculan pertama karakter yang dispesifikasi oleh nilai dalam string pemanggil. Pencarian ordinal adalah pendekatan yang dipakai. Indeks dari kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika tidak ditemukan kecocokan.

int IndexOf(string nilai,
      StringComparison tipePerbandingan)
Melakukan pencarian atas kemunculan pertama substring yang dispesifikasi oleh nilai dalam string pemanggil. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerban-dingan. Indeks dari kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika tidak ditemukan kecocokan.

int LastIndexOf(char nilai)
Melakukan pencarian atas kemunculan terakhir karakter yang dispesifikasi oleh nilai dalam string pemanggil. Pencarian ordinal adalah pendekatan yang dipakai. Indeks dari kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika tidak ditemukan kecocokan.

int LastIndexOf(string nilai,
       StringComparison tipePerbandingan)
Melakukan pencarian atas kemunculan terakhir substring yang dispesifikasi oleh nilai dalam string pemanggil. Bagaimana komparasi dilakukan dispesifikasi oleh tipePerban-dingan. Indeks dari kecocokan pertama dijadikan nilai balik, atau -1 dijadikan nilai balik jika tidak ditemukan kecocokan.

string ToLower(
          CultureInfo.CurrentCulture kultur)
Menghasilkan versi huruf kecil dari string pemanggil. Bagaimana konversi dilakukan dispesifikasi oleh kultur.

string ToUpper(
          CultureInfo.CurrentCulture kultur)
Menghasilkan versi huruf besar dari string pemanggil. Bagaimana konversi dilakukan dispesifikasi oleh kultur.

Tabel 6.1 Beberapa metode pada kelas string

Operasi Pada String
Kelas string memuat beberapa metode yang bisa diterapkan pada string. Tabel 6.1 menampilkan beberapa metode tersebut. Perhatikan bahwa sebagian metode mengambil sebuah parameter bertipe StringComparison. Tipe ini merupakan tipe enumerasi yang mendefinisikan berbagai nilai yang menentukan bagaimana perbandingan string dilakukan. (Enumerasi akan dijelaskan pada Bab 11). Seperti yang Anda tebak, ada berbagai cara dalam membandingkan dua string. Sebagai contoh, dua string dapat dibandingkan berdasarkan nilai biner pada karakter yang membentuk kedua string tersebut. Hal ini dikenal dengan perbandingan ordinal. String juga dapat dibandingkan dengan melibatkan metrik kultur, seperti urutan kamus. Tipe perbandingan ini dinamakan sensitif-kultur. Meskipun metode-metode seperti Compare(), Equals(), IndexOf(), dan LastIndexOf() dapat dipakai untuk perbandingan default, semuanya juga bisa dipakai dengan menspesifikasi secara eksplisit tipe perbandingan yang Anda inginkan.

Secara umum, dan dengan beberapa pengecualian, jika Anda ingin membandingkan dua string secara kultural (urutan kamus), Anda bisa menggunakan StringComparison.CurrentCulture. Jika Anda ingin membandingkan dua string berbasis nilai karakter, Anda bisa menggunakan StringComparison.Ordinal. Untuk mengabaikan perbedaan huruf besar dan huruf kecil, Anda bisa menggunakan StringComparison.CurrentCultureIgnoreCase atau StringComparison.-OrdinalIgnoreCase.

Perhatikan bahwa pada Tabel 6.1, Compare() dideklarasikan sebagai static. Pemodifikasi static dideskripsikan pada Bab 7, tetapi secara singkat akan dijelaskan di sini. Pemodifikasi static ini berarti bahwa Compare() dipanggil dengan nama kelasnya, bukan dengan instans dari kelasnya. Jadi, untuk memanggil Compare(), Anda akan menggunakan format ini:

hasil = string.Compare(str1, str2, bagaimana);

dimana bagaimana menspesifikasi pendekatan perbandingan string.

Perhatikan juga dua metode ToUpper() dan ToLower(), yang membuat string menjadi huruf besar atau huruf kecil. Kedua metode mempunyai parameter CultureInfo. Kelas CultureInfo mendeskripsikan atribut kultural yang akan dipakai untuk konversi. Beberapa contoh pada buku ini akan menggunakan pengaturan kultur sekarang. Pengaturan ini dilakukan dengan melewatkan CultureInfo.CurrentCulture.

Untuk mendapatkan nilai dari sebuah karakter individual pada suatu string, Anda hanya perlu menggunakan indeks. Sebagai contoh:

string str = "test";
Console.WriteLine(str[0]);

menampilkan “t”, karakter pertama dari “test”. Seperti array, indeks string dimulai dari nol. Satu hal penting adalah bahwa Anda tidak dapat menugaskan nilai baru pada sebuah karakter di dalam string menggunakan indeks. Indeks hanya bisa dipakai untuk mendapatkan karakter.

Anda dapat menggunkaan operator == untuk menguji ekualitas dari dua string. Normalnya, ketika operator == diterapkan pada referensi objek, operator itu menentukan apakah kedua referensi menunjuk objek yang sama. Ini berbeda jika objek yang akan dibandingkan bertipe string. Ketika == diterapkan pada dua referensi string, isi kedua string dibandingkan ekualitasnya. Hal ini berlaku pula untuk operator !=: ketika membandingkan objek string, isi kedua string yang dibandingkan. Untuk menguji ekualitas dua string menggunakan informasi kultural, Anda bisa menggunakan Equals() dan menspesifikasi pendekatan perbandingan, seperti StringComparison.CurrentCulture. Hal penting lainnya: metode Compare() dimaksudkan untuk membandingkan string dengan relasi pengurutan.

Berikut adalah sebuah program yang mendemonstrasikan beberapa operasi string:

// Beberapa operasi string.
using System;
using System.Globalization;

class StrOps {
  static void Main() {
    string str1 = "Untuk pemrograman .NET, C# adalah #1.";
    string str2 = "Untuk pemrograman .NET, C# adalah #1.";
    string str3 = "string C# sangat tangguh.";
    string strAtas, strBawah;
    int hasil, idx;

    Console.WriteLine("str1: " + str1);
    Console.WriteLine("Panjang str1: " + str1.Length);

    // Menciptakan versi huruf besar/kecil dari str1.
    strBawah = str1.ToLower(CultureInfo.CurrentCulture);
    strAtas = str1.ToUpper(CultureInfo.CurrentCulture);
    Console.WriteLine("Versi huruf kecil dari str1:\n " +
                      strBawah);
    Console.WriteLine("Versi huruf besar dari str1:\n " +
                      strAtas);
    Console.WriteLine();

    // Menampilkan str1, karakter demi karakter.
    Console.WriteLine("Menampilkan str1, char demi char.");
    for(int i=0; i < str1.Length; i++)
      Console.Write(str1[i]);
    Console.WriteLine("\n");

    // Membandingkan string menggunakan == dan !=. Perbandigan ordinal.
    if (str1 == str2)
      Console.WriteLine("str1 == str2");
    else
      Console.WriteLine("str1 != str2");

    if (str1 == str3)
      Console.WriteLine("str1 == str3");
    else
      Console.WriteLine("str1 != str3");

    // Perbandingan ini sensitif-kultur.
    hasil = string.Compare(str1, str3, StringComparison.CurrentCulture);
    if (hasil == 0)
      Console.WriteLine("str1 dan str3 sama");
    else if (hasil < 0)
      Console.WriteLine("str1 kurang dari str3");
    else
      Console.WriteLine("str1 lebih besar dari str3");

    Console.WriteLine();

    // Menugaskan string baru ke str2.
    str2 = "Satu Dua Tiga Satu";

    // Pencarian string.
    idx = str2.IndexOf("Satu", StringComparison.Ordinal);
    Console.WriteLine("Indeks kemunculan pertama dari Satu: " + idx);

    idx = str2.LastIndexOf("Satu", StringComparison.Ordinal);
    Console.WriteLine("Indeks kemunculan terakhir dari Satu: " + idx);
  }
}

Keluaran program ditampilkan di sini:

str1: Untuk pemrograman .NET, C# adalah #1.
Panjang str1: 37
Versi huruf kecil dari str1:
 untuk pemrograman .net, c# adalah #1.
Versi huruf besar dari str1:
 UNTUK PEMROGRAMAN .NET, C# ADALAH #1.

Menampilkan str1, char demi char.
Untuk pemrograman .NET, C# adalah #1.

str1 == str2
str1 != str3
str1 lebih besar dari str3

Indeks kemunculan pertama dari Satu: 0
Indeks kemunculan terakhir dari Satu: 14

Pada program perhatikan bahwa Compare() dipanggil di sini:

hasil = string.Compare(str1, str3, StringComparison.CurrentCulture);

Seperti yang telah dijelaskan, karena Compare dideklarasikan static, ia dipanggil dengan nama kelasnya, bukan nama instans dari kelasnya. Anda bisa menyambungkan dua string menggunakan operator +. Sebagai contoh, statemen ini

string str1 = "Satu";
string str2 = "Dua";
string str3 = "Tiga";
string str4 = str1 + str2 + str3;

menginisialisasi str4 dengan string “SatuDuaTiga”.

Satu hal penting lainnya: Katakunci string merupakan alias bagi kelas System.String yang didefinisikan oleh pustaka kelas Framework .NET. Jadi, bidang data dan metode yang didefinisikan oleh string adalah dari kelas System.String.


Array String
Seperti tipe data lain, string dapat dimuat di dalam array. Sebagai contoh:

// Demonstrasi array string.
using System;

class StringArray {
    static void Main() {
        string[] str = { "Ini", "adalah", "sebuah", "test." };
        Console.WriteLine("Array asli: ");
       
        for (int i = 0; i < str.Length; i++)
            Console.Write(str[i] + " ");
       
        Console.WriteLine("\n");
       
        // Mengubah string.
        str[1] = "merupakan";
        str[3] = "test, juga!";
        Console.WriteLine("Array termodifikasi: ");
       
        for (int i = 0; i < str.Length; i++)
            Console.Write(str[i] + " ");
    }
}

Berikut adalah keluaran yang dihasilkan program:

Array asli:
Ini adalah sebuah test.

Array termodifikasi:
Ini merupakan sebuah test, juga!

Berikut disajikan sebuah contoh yang lebih menarik. Program berikut menampilkan suatu nilai integer menggunakan kata. Sebagai contoh, nilai 19 akan ditampilkan sebagai “satu sembilan”.

// Menampilkan dijit dalam kata.
using System;

class KonversiDijitKeKata {
    static void Main() {
        int angka;
        int dijitBerikutnya;
        int jumlahDijit;
        int[] n = new int[20];
       
        string[] dijit = { "nol", "satu", "dua",
                            "tiga", "empat", "lima",
                            "enam", "tujuh", "delapan",
                            "sembilan" };
        angka = 1908;
       
        Console.WriteLine("Angka: " + angka);
        Console.Write("Angka dalam kata: ");
       
        dijitBerikutnya = 0;
        jumlahDijit = 0;
       
        // Mendapatkan dijit individual dan menyimpannya dalam n.
        // Dijit-dijit ini disimpan dalam urutan terbalik.
        do
        {
            dijitBerikutnya = angka % 10;
            n[jumlahDijit] = dijitBerikutnya;
            jumlahDijit++;
            angka = angka / 10;
        } while (angka > 0);
       
        jumlahDijit--;
       
        // Menampilkan kata.
        for (; jumlahDijit >= 0; jumlahDijit--)
            Console.Write(dijit[n[jumlahDijit]] + " ");
       
        Console.WriteLine();
    }
}

Keluaran program ditampilkan di sini:

Angka: 1908
Angka dalam kata: satu sembilan nol delapan

Pada program, array string dijit menampung kata-kata yang ekivalen dengan dijit nol sampai sembilan. Program  mengkonversi sebuah integer menjadi kata-kata dengan pertama-tama mendapatkan setiap dijit dari nilai dan menyimpan dijit-dijit tersebut degan urutan terbalik di dalam array int, n.


String Immutable
Isi suatu string immutable. Begitu diciptakan, runtun karakter di dalam string tidak dapat diubah. Jika Anda memerlukan sebuah string yang perlu divariasi atau diubah, Anda hanya perlu menciptakan sebuah string baru yang memuat perubahan yang diinginkan. Karena objek string yang tidak lagi digunakan secara otomatis dikoleksi oleh kolektor sampah, Anda tidak perlu khawatir tentang apa yang terjadi dengan string yang dibuang.

Tentu saja, Anda perlu memahami bahwa variabel referensi string dapat mengubah objek mana yang ditunjuk olehnya. Yang tidak bisa diubah adalah isi dari objek string.

Untuk memahami mengapa string tidak bisa diubah (immutable), berikut diberikan satu metode string: Substring(). Metode Substring() menghasilkan nilai balik berupa sebuah string baru yang memuat penggalan tertentu dari string pemanggil. String asli tidak berubah. Format dari Substring() yang digunakan di sini adalah:

string Substring(int indeksAwal, int panjang)

Di sini, indeksAwal menspesifikasi indekas awal, dan panjang menspesifikasi panjang substring. Berikut merupakan sebuah program yang mendemonstrasikan metode Substring():

// Menggunakan Substring().
using System;

class SubStr {
    static void Main() {
        string stringawal = "C# membuat string mudah.";
      
        // Menciptakan sebuah substring.
        string substr = stringawal.Substring(5, 12);

        Console.WriteLine("stringawal: " + stringawal);
        Console.WriteLine("substring: " + substr);
    }
}

Berikut adalah keluaran program:

stringawal: C# membuat string mudah.
substring: mbuat string

Seperti yang dapat Anda lihat, stringawal tidak berubah, dan substr memuat substring yang diinginkan.

Satu lagi hal penting: Meskipun isi objek string tidak bisa diubah, tetapi ada beberapa situasi dimana Anda perlu mengubah atau memodifikasi sebuah string. Untuk melakukan hal ini, C# menawarkan sebuah kelas yang dikenal dengan StringBuilder, yang berada dalam namespace System.Text. Kelas ini menciptakan objek string yang bisa dimodifikasi. Namun, pada banyak kasus, Anda hanya perlu string, bukan StringBuilder.


String Dapat Digunakan Dalam Statemen switch
Sebuah string dapat dipakai untuk mengendalikan statemen switch. Ini merupakan satu-satunya tipe tak-integer yang dapat digunakan di dalam switch. Sebagai contoh, progam berikut menampilkan dijit ekivalen dari kata “satu”, “dua”, dan “tiga”.

// String dapat mengendalikan statemen switch.
using System;

class StringSwitch {
    static void Main() {
        string[] str = { "satu", "dua", "tiga", "dua", "satu" };
      
        foreach (string s in str)
        {
            switch (s)
            {
                case "satu":
                    Console.Write(1);
                    break;
                case "dua":
                    Console.Write(2);
                    break;
                case "tiga":
                    Console.Write(3);
                    break;
            }
        }
       
        Console.WriteLine();
    }
}

Program menghasilkan keluaran ini:

12321










No comments:

Post a Comment