Kondisi pada C#

Pada bagian ini Saya akan menunjukkan cara menggunakan kondisi pada C#. Terdapat dua perintah kondisi pada C#, yaitu if dan switch. If lebih sering digunakan. Sebelumnya, Saya akan memperkenalkan operator pembanding / relasi dan operator logika yaitu jenis operator yang paling sering digunakan dengan if:

Operator relasi pada C#

Operator Description Example
== Sama dengan pass == "password"
!= Tidak sama dengan status != "aktif"
> Lebih besar dari umur > 30
>= Lebih besar atau sama dengan umur >= 30
< Kurang dari total < 20
<= Kurang atau sama dengan total <= 30
is Uji tipe data oNilai is Double

Operator logika pada C#

Operator Description Example
&& Kondisi AND IsValid && Authorized
|| Kondisi OR pembelian < 100 || pembelian >= 500
! NOT !angka

Sifat operator logika

a b && ||
True True True True
True False False True
False True False True
False False False False

Operator && akan menghasilkan true jika kedua kondisi bernilai benar. Jika salah satu atau kedua kondisi bernilai salah, operator && akan bernilai salah. Operator || akan menghasilkan true jika salah satu atau kedua sisi bernilai benar. Akan bernilai salah apabila kedua kondisi bernilai salah.

If else pada C#

Terdapat beberapa cara untuk menggunakan kondisi if else. Salah satunya adalah if else satu baris yang telah ditunjukkan pada bagian tipe data. Secara umum, struktur if else adalah sebagai berikut:

  if (kondisi1) {
    //Perintah ketika kondisi 1 terpenuhi
  } else if (kondisi2) {
    //Perintah ketika kondisi 2 terpenuhi
  } else if (kondisi3) {
    //Perintah ketika kondisi 3 terpenuhi
  } else {
    //Ketika semua kondisi lain tak terpenuhi, lakukan ini
  }

Kondisi-kondisi di atas adalah variabel atau pernyataan boolean. Dan blok else if dan else bersifat opsional.

Contoh if sederhana pada C#

Sebagai contoh, buat suatu aplikasi windows forms dan desain Form menyerupai gambar di bawah:

Kontrol interaktif pada desain di atas diberi nama: txtUsername, txtPassword, txtKonfirmasi, txtUmur, btnSimpan dan btnBatal. Properties Text pada Form, Label dan Button dapat dilihat pada desain di atas. Khusus untuk txtPassword dan txtKonfirmasi, ubah properties PasswordChar menjadi "#", sehingga input user akan disembunyikan oleh tanda sharp/hash. Kemudian dobel klik pada btnSimpan untuk membuat fungsi event btnSimpan_Click dan ketikkan kode berikut:

private void btnSimpan_Click(object sender, EventArgs e) {
  //Cek field-field yang kosong
  if (txtUsername.Text.Trim() == string.Empty) { 
    MessageBox.Show("Harap isi username");
  }
}

Pada contoh di atas, kita mengecek apakah username koosong. Jika username kosong, kita meminta user untuk menginput username. Terdapat beberapa hal baru pada kode di atas:

  • Double slash (garis miring ganda) menyatakan bahwa semua teks di sebelah kanan double slash adalah komentar dan tidak akan dikompilasi.
  • Setiap string memiliki method .Trim() yang membuang semua spasi di awal dan akhir string.
  • string.Empty adalah sinonim dari "" yang merupakan string kosong.

Coba jalankan program dan klik btnSimpan untuk melihat hasilnya.

Contoh if else pada C#

Berikutnya, coba tambahkan blok else if dan else ke dalam kode. Perhatikan bahwa Saya juga membuat sebuah variabel bernama user untuk menyederhanakan kode:

private void btnSimpan_Click(object sender, EventArgs e) {
  //Cek field-field yang kosong
  string user = txtUsername.Text;
  if (user.Trim() == string.Empty) {
    MessageBox.Show("Harap isi username");
  } else if (user.Length < 5 || user.Length > 25) {
    MessageBox.Show("Panjang username harus di antara 5 dan 25 karakter");
  } else if (user.ToLower() == "fandi") {
    MessageBox.Show("Username sudah terpakai");
  } else {
    /* Kode untuk menyimpan data pendaftaran
      * Akan dijelaskan pada saat belajar database
      * Untuk saat ini kita akan membohongi user
      * Dengan mengatakan "Pendaftaran berhasil"
      */
    MessageBox.Show("Pendaftaran berhasil");
  }
}

Terdapat beberapa hal baru lagi di atas:

  • Setiap string memiliki property .Length yang memberikan jumlah karakter di dalam suatu string.
  • Setiap string memiliki property .ToLower() yang mengkonversi semua huruf di dalam strim menjadi huruf kecil.
  • Semua yang di dalam /* dan */ pada C# adalah komentar multibaris dan tidak akan dikompilasi.

Coba kompilasi dan jalankan program (tekan F5) dan ketikkan beberapa teks ke dalam username dan klik Simpan. Cobalah nama-nama berikut:

  • agus, program akan menampilkan: Panjang username harus di antara 5 dan 25 karakter.
  • fandi, program akan menampilkan: Username sudah terpakai
  • kennedy, program akan menampilkan: Pendaftaran berhasil

Kesalahan umum pada if else

Salah satu kesalahan umum pemrograman adalah salah meletakkan kode. Sebagai contoh, seorang programmer pemula dapat dengan mudah terjebak membuat kode seperti berikut:

private void btnSimpan_Click(object sender, EventArgs e) {
  //Cek field-field yang kosong
  string user = txtUsername.Text;
  if (user.Trim() == string.Empty) {
    MessageBox.Show("Harap isi username");
  } else if (user.Length < 5 || user.Length > 25) {
    MessageBox.Show("Panjang username harus di antara 5 dan 25 karakter");
  } else if (user.ToLower() == "fandi") {
    MessageBox.Show("Username sudah terpakai");
  } 
  MessageBox.Show("Pendaftaran berhasil");
}

Perhatikan bahwa kode untuk menyimpan data ("Pendaftaran berhasil") berada di luar blok if, yang berarti bahwa username apapun akan selalu disimpan, tidak peduli ada peringatan atau tidak. Hanya pernyataan di dalam blok if yang dieksekusi dengan kondisi. Di luar blok if, pernyataan akan selalu dieksekusi.

If else bersarang pada C#

Setelah berhasil menjalankan kode di atas, coba tambahkan validasi password ke dalam blok kode else seperti ditunjukkan di bawah. Perhatikan bahwa telah ditambahkan variabel pass dan konfirmasi dan juga MessageBox "Pendaftaran berhasil" telah dipindahkan ke dalam blok else milik validasi password:

private void btnSimpan_Click(object sender, EventArgs e) {
  //Cek field-field yang kosong
  string user = txtUsername.Text;
  string pass = txtPassword.Text;
  string konfirmasi = txtKonfirmasi.Text;
  if (user.Trim() == string.Empty) {
    MessageBox.Show("Harap isi username");
  } else if (user.Length < 5 || user.Length > 25) {
    MessageBox.Show("Panjang username harus di antara 5 dan 25 karakter");
  } else if (user.ToLower() == "fandi") {
    MessageBox.Show("Username sudah terpakai");
  } else {
    if (pass.Trim() == "") {
      MessageBox.Show("Harap isi password");
    } else if (pass.Length < 6) {
      MessageBox.Show("Password paling tidak harus 6 karakter");
    } else if (pass != konfirmasi) {
      MessageBox.Show("Konfirmasi password tidak sesuai");
    } else {
      /* Kode untuk menyimpan data pendaftaran
        * Akan dijelaskan pada saat belajar database
        * Untuk saat ini kita akan membohongi user
        * Dengan mengatakan "Pendaftaran berhasil"
        */
      MessageBox.Show("Pendaftaran berhasil");
    }
  }
}

Coba jalankan kode dan klik tombol simpan dengan berbagai kondisi. Password if di dalam blok else ditujukan untuk demonstrasi if bersarang. Meskipun hal ini dapat dilakukan, akan lebih baik untuk menghindari if bersarang karena if bersarang dapat dengan mudah membingungkan kita.

Alternatif if bersarang

Now select all the codes inside the btnSave_Click function and press CTRL + K, C to comment all those codes and type in some new codes (to uncomment, select and press CTRL + K. U):

private void btnSimpan_Click(object sender, EventArgs e) {
  ////Cek field-field yang kosong
  //string user = txtUsername.Text;
  //string pass = txtPassword.Text;
  //string konfirmasi = txtKonfirmasi.Text;
  //if (user.Trim() == string.Empty) {
  //  MessageBox.Show("Harap isi username");
  //} else if (user.Length < 5 || user.Length > 25) {
  //  MessageBox.Show("Panjang username harus di antara 5 dan 25 karakter");
  //} else if (user.ToLower() == "fandi") {
  //  MessageBox.Show("Username sudah terpakai");
  //} else {
  //  if (pass.Trim() == "") {
  //    MessageBox.Show("Harap isi password");
  //  } else if (pass.Length < 6) {
  //    MessageBox.Show("Password paling tidak harus 6 karakter");
  //  } else if (pass != konfirmasi) {
  //    MessageBox.Show("Konfirmasi password tidak sesuai");
  //  } else {
  //    /* Kode untuk menyimpan data pendaftaran
  //      * Akan dijelaskan pada saat belajar database
  //      * Untuk saat ini kita akan membohongi user
  //      * Dengan mengatakan "Pendaftaran berhasil"
  //      */
  //    MessageBox.Show("Pendaftaran berhasil");
  //  }
  //}

  //Cek field-field yang kosong
  string user = txtUsername.Text;
  string pass = txtPassword.Text;
  string konfirmasi = txtKonfirmasi.Text;

  //Validasi username
  if (user.Trim() == "") { MessageBox.Show("Harap isi username"); return; }
  if (user.Length < 5 || user.Length > 25) { MessageBox.Show("Panjang username harus di antara 5 dan 25 karakter"); return; }
  if (user.ToLower() == "fandi") { MessageBox.Show("Username sudah terpakai"); return; }

  //Validasi password
  if (pass.Trim() == "") { MessageBox.Show("Harap isi password"); return; }
  if (pass.Length < 6) { MessageBox.Show("Password paling tidak harus 6 karakter"); return; }
  if (pass != konfirmasi) { MessageBox.Show("Konfirmasi password tidak sesuai"); return; }

  //Validasi umur
  int umur;
  bool umurBenar = Int32.TryParse(txtUmur.Text, out umur);
  if (!umurBenar) { MessageBox.Show("Harap input umur yang benar"); return; }
  
  //Registrasi
  string tipeRegistrasi;
  if (umur < 18) tipeRegistrasi = "Anak anak"; else tipeRegistrasi = "Dewasa";
  MessageBox.Show("Pendaftaran " + tipeRegistrasi + " berhasil");
}

Saya memperkenalkan perintah return pada kode di atas. Perintah return akan mengakhiri eksekusi suatu fungsi, sehingga semua baris setelah perintah return tidak akan dijalankan. Menurut pendapat saya, kode di atas jauh lebih rapi dibandingkan kode if bersarang

Perhatikan juga bahwa pada bagian registrasi, terdapat perintah if satu baris. Pada perintah if else sederhana, lebih baik menggunakan bentuk ini agar dapat lebih mudah membaca dan memahami kode kita sendiri. Jika kita menggunakan if berbentuk blok-blok seperti sebelumnya, kodenya akan tampak seperti:

  if (umur < 18) {
    tipeRegistrasi = "Anak anak";
  } else {
    tipeRegistrasi = "Dewasa";
  }

If berbentuk blok memakan 5 baris kode, sedangkan if satu baris hanya menggunakan satu baris.

Operator ternary pada C#

Ada yang lebih baik lagi. Pada penugasan sederhana yang berkondisi, kita dapat menggunakan operator ternary untuk membuat kode kita lebih pendek lagi:

tipeRegistrasi = (umur < 18) ? "Anak anak" : "Dewasa";

Format ternary operator adalah: (kondisi) ? [nilai jika benar] : [nilai jika salah]; 

Perintah switch pada C#

Perintah switch adalah salah satu struktur kode yang pernah saya gunakan. Hampir selalu, struktur if dapat menggantikan struktur switch. Bentuk perintah switch pada C# adalah:

  switch (variabelUji) {
    case [literal 1]:
      //Blok kode 1
      break;
    case [literal 2]:
      //Blok kode 2
      break;
    case [literal 3]:
      //Blok kode 3
      break;
    default:
      //Jika yang lain tidak terpenuhi
      break;
  }

Sebagai contoh, buatlah suatu aplikasi console bernama cobaSwitch dan ketikkan kode berikut:

class Program {
  static void Main(string[] args) {
    Console.WriteLine("1. Utara");
    Console.WriteLine("2. Timur");
    Console.WriteLine("3. Barat");
    Console.WriteLine("4. Selatan");
    Console.WriteLine("Ke mana anda akan pergi?");
    string strInput = Console.ReadLine();

    int arah;
    bool berupaAngka = Int32.TryParse(strInput, out arah);
    if (!berupaAngka) {
      Console.WriteLine("Input tidak benar");
    } else {
      switch (arah) {
        case 1: Console.WriteLine("Tampak sebuah danau"); break;
        case 2: Console.WriteLine("Tampak sebuah hutan"); break;
        case 3: Console.WriteLine("Tampak sebuah padang rumput"); break;
        case 4: Console.WriteLine("Tampak sebuah gurun"); break;
        default: Console.WriteLine("Arah tidak benar"); break;
      }
    }
    Console.ReadKey();
  }
}