Bagikan melalui


Pernyataan pilihan - if, if-else, dan switch

Pernyataan if, if-else dan switch memilih pernyataan untuk dijalankan dari banyak jalur yang mungkin berdasarkan nilai ekspresi. Pernyataan menjalankan if pernyataan hanya jika ekspresi Boolean yang disediakan mengevaluasi ke true. Pernyataan ini if-else memungkinkan Anda memilih salah satu dari dua jalur kode yang akan diikuti berdasarkan ekspresi Boolean. Pernyataanswitch memilih daftar pernyataan untuk dijalankan berdasarkan kecocokan pola dengan ekspresi.

Pernyataan if

Pernyataan if dapat berupa salah satu dari dua bentuk berikut:

  • Pernyataan if dengan else bagian memilih salah satu dari dua pernyataan yang akan dijalankan berdasarkan nilai ekspresi Boolean, seperti yang ditunjukkan contoh berikut:

    DisplayWeatherReport(15.0);  // Output: Cold.
    DisplayWeatherReport(24.0);  // Output: Perfect!
    
    void DisplayWeatherReport(double tempInCelsius)
    {
        if (tempInCelsius < 20.0)
        {
            Console.WriteLine("Cold.");
        }
        else
        {
            Console.WriteLine("Perfect!");
        }
    }
    
  • Pernyataan if tanpa else bagian menjalankan isinya hanya jika ekspresi Boolean mengevaluasi ke true, seperti yang ditunjukkan contoh berikut:

    DisplayMeasurement(45);  // Output: The measurement value is 45
    DisplayMeasurement(-3);  // Output: Warning: not acceptable value! The measurement value is -3
    
    void DisplayMeasurement(double value)
    {
        if (value < 0 || value > 100)
        {
            Console.Write("Warning: not acceptable value! ");
        }
    
        Console.WriteLine($"The measurement value is {value}");
    }
    

Anda dapat menumpuk if pernyataan untuk memeriksa beberapa kondisi, seperti yang ditunjukkan contoh berikut:

DisplayCharacter('f');  // Output: A lowercase letter: f
DisplayCharacter('R');  // Output: An uppercase letter: R
DisplayCharacter('8');  // Output: A digit: 8
DisplayCharacter(',');  // Output: Not alphanumeric character: ,

void DisplayCharacter(char ch)
{
    if (char.IsUpper(ch))
    {
        Console.WriteLine($"An uppercase letter: {ch}");
    }
    else if (char.IsLower(ch))
    {
        Console.WriteLine($"A lowercase letter: {ch}");
    }
    else if (char.IsDigit(ch))
    {
        Console.WriteLine($"A digit: {ch}");
    }
    else
    {
        Console.WriteLine($"Not alphanumeric character: {ch}");
    }
}

Dalam konteks ekspresi, Anda dapat menggunakan operator ?:bersyarat untuk mengevaluasi salah satu dari dua ekspresi berdasarkan nilai ekspresi Boolean.

Pernyataan switch

Pernyataan switch memilih daftar pernyataan untuk dijalankan berdasarkan kecocokan pola dengan ekspresi kecocokan, seperti yang ditunjukkan contoh berikut:

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

Pada contoh sebelumnya, switch pernyataan menggunakan pola berikut:

Penting

Untuk informasi tentang pola yang didukung oleh switch pernyataan, lihat Pola.

Contoh sebelumnya juga menunjukkan kasus ini default . Kasus default menentukan pernyataan yang akan dijalankan saat ekspresi kecocokan tidak cocok dengan pola kasus lain. Jika ekspresi kecocokan tidak cocok dengan pola kasus apa pun dan tidak default ada kasus, kontrol jatuh melalui switch pernyataan.

Pernyataan switch menjalankan daftar pernyataan di bagian sakelar pertama yang pola kasusnya cocok dengan ekspresi kecocokan dan pelindung kasusnya, jika ada, mengevaluasi ke true. Pernyataan switch mengevaluasi pola kasus dalam urutan teks dari atas ke bawah. Pengkompilasi menghasilkan kesalahan ketika switch pernyataan berisi kasus yang tidak dapat dijangkau. Itu adalah kasus yang sudah ditangani oleh huruf besar atau polanya tidak mungkin dicocokkan.

Nota

Kasus ini default dapat muncul di tempat mana pun dalam pernyataan switch . Terlepas dari posisinya, default kasus dievaluasi hanya jika semua pola kasus lain tidak cocok atau goto default; pernyataan dijalankan di salah satu bagian pengalihan.

Anda dapat menentukan beberapa pola kasus untuk satu bagian switch pernyataan, seperti yang ditunjukkan contoh berikut:

DisplayMeasurement(-4);  // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50);  // Output: Measured value is 50.
DisplayMeasurement(132);  // Output: Measured value is 132; out of an acceptable range.

void DisplayMeasurement(int measurement)
{
    switch (measurement)
    {
        case < 0:
        case > 100:
            Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
            break;
        
        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

Dalam pernyataan switch , kontrol tidak dapat jatuh dari satu bagian pengalihan ke bagian berikutnya. Seperti yang ditunjukkan contoh di bagian ini, biasanya Anda menggunakan break pernyataan di akhir setiap bagian pengalihan untuk meneruskan kontrol keluar dari switch pernyataan. Anda juga dapat menggunakan pernyataan pengembalian dan pelemparan untuk meneruskan kontrol dari switch pernyataan. Untuk meniru perilaku fall-through dan meneruskan kontrol ke bagian sakelar lain, Anda dapat menggunakan pernyataan .goto

Penting

Setiap bagian pengalihan harus diakhir breakdengan , goto atau return. Jatuh dari satu bagian sakelar ke bagian berikutnya menghasilkan kesalahan kompilator. Namun, beberapa label sakelar dapat diterapkan ke bagian sakelar yang sama, seperti case < 0: dalam contoh di atas. Pilihan desain yang disengaja ini memungkinkan penanganan beberapa kasus secara ringkas yang memiliki logika yang sama atau saling bergantung.

Dalam konteks ekspresi, Anda dapat menggunakan switch ekspresi untuk mengevaluasi ekspresi tunggal dari daftar ekspresi kandidat berdasarkan kecocokan pola dengan ekspresi.

Penting

Perbedaan antara ekspresi pengalihan dan pernyataan pengalihan:

  • pernyataan switch digunakan untuk mengontrol alur eksekusi dalam blok kode.
  • ekspresi switch biasanya digunakan dalam konteks pengembalian nilai dan penetapan nilai, seringkali sebagai anggota bertubuh ekspresi.
  • bagian kasus ekspresi pengalihan tidak boleh kosong, pernyataan pengalihan bisa.

Penjaga kasus

Pola kasus mungkin tidak cukup ekspresif untuk menentukan kondisi untuk eksekusi bagian pengalihan. Dalam kasus seperti itu, Anda dapat menggunakan penjaga kasus. Itu adalah kondisi tambahan yang harus dipenuhi bersama dengan pola yang cocok. Penjaga kasus harus berupa ekspresi Boolean. Anda menentukan penjaga kasus setelah when kata kunci yang mengikuti pola, seperti yang ditunjukkan contoh berikut:

DisplayMeasurements(3, 4);  // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5);  // Output: Both measurements are valid and equal to 5.

void DisplayMeasurements(int a, int b)
{
    switch ((a, b))
    {
        case (> 0, > 0) when a == b:
            Console.WriteLine($"Both measurements are valid and equal to {a}.");
            break;

        case (> 0, > 0):
            Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
            break;

        default:
            Console.WriteLine("One or both measurements are not valid.");
            break;
    }
}

Contoh sebelumnya menggunakan pola posisional dengan pola relasional berlapis.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:

Untuk informasi selengkapnya tentang pola, lihat bagian Pola dan pencocokan pola dari spesifikasi bahasa C#.

Lihat juga