Pernyataan seleksi

Tip

Artikel ini adalah bagian dari bagian Dasar-Dasar untuk pengembang yang sudah mengetahui setidaknya satu bahasa pemrograman dan mempelajari C#. Jika Anda baru menggunakan pemrograman, mulailah dengan tutorial Memulai terlebih dahulu. Untuk sintaks lengkapnya, lihat pernyataan pilihan dalam referensi bahasa.

Berasal dari bahasa lain? C++, Java, dan JavaScript semuanya berbagi warisan C, jadi if, else, dan switch baca yang sama di C#. Satu perbedaan yang perlu diperhatikan: C# melarang eksekusi berlanjut antara case switch yang tidak kosong, dan setiap label case dapat memeriksa pola, bukan hanya konstanta. Jika Anda berasal dari Python, if/else if/else di C# setara dengan if/elif/else, dan switch berbasis pola di C# paling mirip dengan pernyataan match Python.

Pernyataan pilihan memilih blok kode mana yang berjalan berdasarkan kondisi. C# menyediakan dua: if (dengan opsional else) untuk percabangan pada nilai Boolean, dan switch untuk membandingkan satu nilai dengan beberapa kasus. Ekspresi Boolean adalah ekspresi apa pun yang mengevaluasi ke true atau false, seperti perbandingan temperature >= 25.

Buat branch dengan if dan else

Pernyataan if menjalankan bloknya hanya ketika ekspresi Boolean-nya adalah true. else Tambahkan blok untuk menyediakan kode yang berjalan saat kondisinya adalah false:

int temperature = 28;

// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
    Console.WriteLine("Warm"); // => Warm
}
else
{
    Console.WriteLine("Cool");
}

Isi atau ifelse adalah pernyataan tunggal, seperti penugasan atau panggilan metode. Pernyataan blok adalah pernyataan tunggal yang mengapit nol atau lebih pernyataan dalam kurung kurawal ({ }).

Banyak standar pengodean merekomendasikan agar Anda mengapit isi blok cabang dengan kurung kurawal, meskipun hanya untuk satu pernyataan. Kurung kurawal memperjelas cakupan. Ini mencegah kesalahan umum: menambahkan baris kedua belakangan yang Anda harapkan hanya akan dijalankan dalam kondisi tertentu, tetapi ternyata selalu dijalankan. Hanya kurung kurawal yang menentukan pernyataan mana yang termasuk ke dalam percabangan. C# tidak menganggap spasi sebagai sesuatu yang bermakna, jadi indentasi saja tidak pernah dianggap bermakna. Kurung kurawal diperbolehkan bahkan untuk satu baris: blok tersebut adalah satu pernyataan tunggal yang dijalankan oleh percabangan. Beri indentasi pada kode Anda agar mudah dibaca, tetapi gunakan kurung kurawal untuk mendefinisikan blok.

Menguji beberapa kondisi dengan else if

Untuk memilih di antara lebih dari dua jalur, rangkaikan kondisi dengan else if. C# mengevaluasi setiap kondisi secara berurutan dan menjalankan blok pertama yang kondisinya adalah true, lalu melewati sisanya. Terakhir, else menangani semua kasus yang tersisa:

int score = 82;

// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
    grade = "A";
}
else if (score >= 80)
{
    grade = "B";
}
else if (score >= 70)
{
    grade = "C";
}
else
{
    grade = "F";
}

Console.WriteLine(grade); // => B

Urutan penting dalam sebuah rantai. Karena kondisi pencocokan pertama menang, letakkan kondisi yang paling spesifik terlebih dahulu. Dalam contoh sebelumnya, menguji score >= 80 sebelum score >= 70 memastikan bahwa skor 82 dipetakan ke "B" daripada "C".

Mencocokkan nilai dengan switch pernyataan

Ketika Anda membandingkan satu nilai dengan banyak kasus diskrit, pernyataan switch lebih jelas daripada rangkaian else if yang panjang. Seperti if, switch pernyataan adalah pernyataan percabangan: ia memilih kode mana yang akan dijalankan. Setiap case label mencantumkan nilai yang akan dicocokkan, dan setiap case bagian berakhir dengan break pernyataan. Tumpuk label agar berbagi satu isi yang sama, dan gunakan bagian default untuk nilai yang tidak cocok dengan kasus mana pun:

DayOfWeek day = DayOfWeek.Saturday;

// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
    case DayOfWeek.Saturday:
    case DayOfWeek.Sunday:
        Console.WriteLine("Weekend"); // => Weekend
        break;
    default:
        Console.WriteLine("Weekday");
        break;
}

Tidak seperti C dan Java, C# tidak mengizinkan eksekusi berlanjut dari satu bagian case yang tidak kosong ke bagian berikutnya. Setiap bagian yang berisi kode harus diakhiri dengan break (atau pernyataan lompatan lainnya, seperti return atau goto). Aturan ini mencegah bug fall-through yang terjadi secara tidak sengaja dan umum terjadi dalam bahasa-bahasa tersebut.

Menguji pola dengan case dan when

case Label tidak terbatas pada nilai konstanta. Ini dapat menguji pola, yang merupakan aturan yang menjelaskan bentuk atau nilai data. Pola relasional seperti < 0 cocok dengan nilai apa pun kurang dari nol. when Tambahkan klausa untuk melampirkan kondisi tambahan yang juga harus true agar kasus cocok:

int measurement = 42;

// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
    case < 0:
        Console.WriteLine("Negative");
        break;
    case 0:
        Console.WriteLine("Zero");
        break;
    case > 0 when measurement % 2 == 0:
        Console.WriteLine("Positive and even"); // => Positive and even
        break;
    default:
        Console.WriteLine("Positive and odd");
        break;
}

Kasus berbasis pola dievaluasi dari atas ke bawah, sehingga pola yang lebih spesifik termasuk sebelum yang lebih umum. Untuk katalog lengkap pola, lihat pencocokan pola.

Pilih nilai dengan ekspresi

Pernyataan if dan switch memutuskan kode mana yang berjalan. Saat Anda perlu memilih nilai sebagai gantinya, gunakan ekspresi. Ekspresi dievaluasi menjadi suatu nilai, sehingga Anda dapat menggunakannya di mana pun sebuah nilai diperlukan, seperti pada ruas kanan operasi penugasan atau sebagai argumen metode. C# menawarkan formulir ekspresi yang memilih nilai dari alternatif seperti operator kondisi dan switch ekspresi.

Operator kondisional ?:

Operator bersyarat ?: memilih salah satu dari dua nilai berdasarkan kondisi Boolean.

Untuk sintaksisnya, perilaku sirkuit pendek, dan panduan tentang memilihnya alih-alih if/else, lihat Operator kondisional ?:.

ekspresi switch

Ekspresi switch adalah rekan ekspresi untuk switch pernyataan. Alih-alih menjalankan kode untuk kasus yang cocok, kode tersebut mengevaluasi ke nilai. Ini lebih ringkas daripada menetapkan nilai di setiap cabang pernyataan switch, dan kompiler akan memperingatkan Anda jika cabang-cabang tersebut tidak mencakup setiap kemungkinan input. Ekspresi switch adalah bagian inti dari pencocokan pola. Untuk mempelajari kapan dan bagaimana menggunakannya, lihat pencocokan pola dan referensi switch ekspresi.

Baca juga