Langsung ke konten
KamusNgoding
Pemula Csharp 3 menit baca

Percabangan dan Perulangan di C#

#csharp #if-else #switch #for #foreach #while #do-while #break #continue #pattern-matching

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#:

StrukturKapan Digunakan
if/elsePengambilan keputusan berdasarkan kondisi
switch klasikMembandingkan satu variabel dengan banyak nilai
switch expressionMenghasilkan nilai berdasarkan kondisi (modern)
forIterasi dengan counter/indeks
foreachIterasi koleksi (array, list)
whileIterasi sampai kondisi terpenuhi
do-whileIterasi minimal sekali
breakKeluar dari loop atau switch
continueLewati 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.

Artikel Terkait