Program yang cerdas bisa mengambil keputusan dan mengulang tugas secara otomatis. Bayangkan aplikasi e-commerce — sistem harus memutuskan apakah stok tersedia sebelum proses pembelian, lalu mengulang pengecekan untuk setiap item di keranjang. Di C#, ini dilakukan dengan percabangan dan perulangan. C# juga memiliki fitur modern seperti pattern matching di switch yang membuat kode lebih ekspresif.
Percabangan: if / else
if Dasar
int stok = 5;
if (stok > 0)
{
Console.WriteLine("Produk tersedia");
}
// Output: Produk tersedia
if / else
int saldo = 50_000;
int harga = 75_000;
if (saldo >= harga)
{
Console.WriteLine("Pembelian berhasil");
}
else
{
Console.WriteLine("Saldo tidak cukup");
Console.WriteLine($"Kekurangan: Rp {harga - saldo:N0}");
}
// Output:
// Saldo tidak cukup
// Kekurangan: Rp 25.000
if / else if / else
int nilai = 85;
if (nilai >= 90)
Console.WriteLine("Grade: A");
else if (nilai >= 80)
Console.WriteLine("Grade: B");
else if (nilai >= 70)
Console.WriteLine("Grade: C");
else if (nilai >= 60)
Console.WriteLine("Grade: D");
else
Console.WriteLine("Grade: E");
// Output: Grade: B
Tip: Untuk blok satu baris, tanda kurung
{}opsional tapi disarankan tetap ditulis untuk menghindari bug saat menambahkan baris kode di kemudian hari.
Percabangan: switch
switch Klasik
int bulan = 4;
switch (bulan)
{
case 1:
Console.WriteLine("Januari");
break;
case 2:
Console.WriteLine("Februari");
break;
case 3:
Console.WriteLine("Maret");
break;
case 4:
Console.WriteLine("April");
break;
// ... dst
default:
Console.WriteLine("Bulan tidak valid");
break;
}
// Output: April
switch Expression (C# 8+) — Lebih Modern
int bulan = 4;
string nama_bulan = bulan switch
{
1 => "Januari",
2 => "Februari",
3 => "Maret",
4 => "April",
5 => "Mei",
6 => "Juni",
_ => "Bulan tidak dikenali" // _ adalah wildcard/default
};
Console.WriteLine(nama_bulan);
// Output: April
Pattern Matching di switch (C# 8+)
C# memiliki kemampuan pattern matching yang sangat powerful:
object data = 42;
string tipe = data switch
{
int n when n > 0 => $"Angka positif: {n}",
int n when n < 0 => $"Angka negatif: {n}",
int => "Angka nol",
string s => $"Teks: {s}",
null => "Nilai kosong (null)",
_ => "Tipe tidak dikenali"
};
Console.WriteLine(tipe);
// Output: Angka positif: 42
Perulangan: for
// Syntax: for (inisialisasi; kondisi; update)
for (int i = 1; i <= 5; i++)
{
Console.Write($"{i} ");
}
Console.WriteLine();
// Output: 1 2 3 4 5
// Menghitung mundur
for (int i = 5; i >= 1; i--)
{
Console.Write($"{i} ");
}
Console.WriteLine();
// Output: 5 4 3 2 1
// Mencari angka genap
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
Console.Write($"{i} ");
}
Console.WriteLine();
// Output: 2 4 6 8 10
Perulangan: foreach
foreach adalah cara paling bersih untuk iterasi koleksi di C#:
// Dengan array
string[] bahasa = { "C#", "Python", "JavaScript", "Java" };
foreach (string lang in bahasa)
{
Console.WriteLine($"- {lang}");
}
// Output:
// - C#
// - Python
// - JavaScript
// - Java
// Menghitung total
int[] nilai = { 85, 92, 78, 95, 88 };
int total = 0;
foreach (int n in nilai)
{
total += n;
}
double rata = (double)total / nilai.Length;
Console.WriteLine($"Rata-rata: {rata:F1}");
// Output: Rata-rata: 87.6
Perulangan: while
int angka = 1;
while (angka <= 5)
{
Console.Write($"{angka} ");
angka++;
}
Console.WriteLine();
// Output: 1 2 3 4 5
// Membaca input sampai valid
Console.Write("Masukkan angka positif: ");
int input = int.Parse(Console.ReadLine() ?? "0");
while (input <= 0)
{
Console.Write("Angka harus positif, coba lagi: ");
input = int.Parse(Console.ReadLine() ?? "0");
}
Console.WriteLine($"Angka valid: {input}");
Perulangan: do-while
Dieksekusi minimal sekali sebelum mengecek kondisi — cocok untuk menu:
int pilihan;
do
{
Console.WriteLine("\n=== Menu Utama ===");
Console.WriteLine("1. Lihat Profil");
Console.WriteLine("2. Ubah Password");
Console.WriteLine("3. Keluar");
Console.Write("Pilih: ");
pilihan = int.Parse(Console.ReadLine() ?? "0");
switch (pilihan)
{
case 1: Console.WriteLine("Menampilkan profil..."); break;
case 2: Console.WriteLine("Mengubah password..."); break;
case 3: Console.WriteLine("Sampai jumpa!"); break;
default: Console.WriteLine("Pilihan tidak valid!"); break;
}
} while (pilihan != 3);
break, continue, dan goto
break — Keluar dari Loop
for (int i = 1; i <= 10; i++)
{
if (i == 6) break;
Console.Write($"{i} ");
}
Console.WriteLine();
// Output: 1 2 3 4 5
continue — Lewati Iterasi Ini
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0) continue; // lewati angka genap
Console.Write($"{i} ");
}
Console.WriteLine();
// Output: 1 3 5 7 9
Loop Bersarang
// Tabel perkalian
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5; j++)
{
Console.Write($"{i * j,4}"); // lebar kolom 4
}
Console.WriteLine();
}
// Output:
// 1 2 3 4 5
// 2 4 6 8 10
// 3 6 9 12 15
// 4 8 12 16 20
// 5 10 15 20 25
Pertanyaan yang Sering Diajukan
Kapan menggunakan for vs foreach?
Gunakan foreach saat kamu hanya perlu membaca elemen koleksi tanpa perlu tahu indeksnya — lebih bersih dan tidak bisa salah indeks. Gunakan for saat kamu perlu indeks (posisi elemen), atau saat iterasi tidak linear (melompat, mundur, dll.).
Apa itu pattern matching di switch C#?
Pattern matching adalah fitur C# modern yang memungkinkan switch tidak hanya membandingkan nilai, tapi juga memeriksa tipe, kondisi, dan struktur data sekaligus. Ini jauh lebih powerful dari switch klasik dan membuat kode lebih ekspresif. Diperkenalkan di C# 7 dan terus diperkaya di versi berikutnya.
Apa perbedaan while dan do-while?
while mengecek kondisi dulu sebelum eksekusi — jika kondisi langsung false, kode tidak pernah dijalankan. do-while menjamin kode dieksekusi minimal sekali sebelum mengecek kondisi. Gunakan do-while untuk input validasi atau menu yang harus ditampilkan setidaknya sekali.
Apakah switch expression di C# 8 menggantikan switch biasa?
switch expression lebih ringkas dan cocok untuk ekspresi yang mengembalikan nilai. Tapi switch statement klasik masih relevan untuk blok kode yang lebih kompleks atau ketika setiap case perlu melakukan banyak hal. Keduanya tetap valid di C# modern.
Kesimpulan
Ringkasan struktur kontrol di C#:
| Struktur | Kapan Digunakan |
|---|---|
if/else | Pengambilan keputusan berdasarkan kondisi |
switch klasik | Membandingkan satu variabel dengan banyak nilai |
switch expression | Menghasilkan nilai berdasarkan kondisi (modern) |
for | Iterasi dengan counter/indeks |
foreach | Iterasi koleksi (array, list) |
while | Iterasi sampai kondisi terpenuhi |
do-while | Iterasi minimal sekali |
break | Keluar dari loop atau switch |
continue | Lewati iterasi saat ini |
Artikel sebelumnya: Operator dan Ekspresi di C# — cara melakukan operasi di C#.
Langkah selanjutnya: Fungsi dan Method di C# — cara mengorganisir kode dalam method yang bisa dipanggil ulang.