Умовні оператори

Умовні оператори – це конструкції, які використовують умовні вирази для керування ходом виконання програми.

Умовний оператор if

Умовний оператор if – використовується у випадках, коли виконання інструкції, чи набору інструкцій, залежить від деякого логічного виразу.

В мові C#, є дві форми умовного оператора if: з неповним та повним розгалуженням.

if з неповним розгалуженням

Оператор з неповним розгалуженням має наступний синтаксис:

if (умовний_вираз)
   інструкція;

Приклад на мові C#:

int a = 0;
int b = 12;
if (a < b)
    Console.WriteLine(a);

Для виконання декількох інструкцій, потрібно взяти їх у операторні дужки:

double c = 8;
double d = 4;
if (d != 0)
{
    var f = c / d;
    Console.WriteLine(z);
}

if з повним розгалуженням

В операторі if з повним розгалуженням, додатково використовується ключове слово else:

int n = 8;
int m = 0;
if (m == 0)
{
    Console.WriteLine("Ділити на нуль не можна!");
}
else
{
    var r = n / m;
    Console.WriteLine(r);
}

В операторі if, замість інструкцій можна укладати інші оператори розгалуження, будуючи таким чином складну логіку роботи програми.

Приклад використання оператора if

Розглянемо задачу визначення до якої чверті координатної площини відноситься точка з координатами (x, y). Будемо вважати, що точка не може лежати на осях.

Код програми для визначення якій чверті належить задана точка:

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.Write("x = ");
        //читаємо значення з консолі, та конвертуємо його в int
        int x = Convert.ToInt32(Console.ReadLine());
        Console.Write("y = ");
        int y = Convert.ToInt32(Console.ReadLine());
        //змінна для зберігання номеру чверті
        string q; 
        //код для перевірки
        if (y > 0)
        {
            if (x > 0)
                q = "I";
            else // x < 0                
                q = "II";
        }
        else // y < 0
        {
            if (x < 0)
                q = "III";
            else // x > 0                
                q = "IV";
        }

        Console.WriteLine($"Точка лежить в {q} чверті");
        Console.ReadLine();
    }
}

Тернарний умовний оператор ?:

Тернарний оператор – єдиний оператор мови С#, який працює відразу з трьома операндами, в залежності від результату умови, яка задана в першому операнді, повертає значення другого(якщо перший - true), або третього(якщо перший - false) операнду. При цьому другий і третій операнди повинні бути однакового типу даних.

int a = 3;
int b = 4;
int m = a < b ? a : b; //m = a = 3
//аналогічний запис
if(a < b)
{
    m = a;
}
else
{
    m = b;
}

int n = a > b ? a : b; //n = b = 4
//аналогічний запис
if(a > b)
{
    n = a;
}
else
{
    n = b;
}

Тернарний оператор може приймати в якості операндів інші тернарні оператори.

Якщо переписати код програми з попереднього прикладу, використовуючи тернарний оператор, то отримаємо:

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.Write("x = ");
        int x = Convert.ToInt32(Console.ReadLine());
        Console.Write("y = ");
        int y = Convert.ToInt32(Console.ReadLine());
        string q = y > 0 ? (x > 0 ? "I" : "II") : (x < 0 ? "III" : "IV");
        Console.WriteLine($"Точка лежить в {q} чверті");
        Console.ReadLine();
    }
}

Як можна побачити, вся логіка роботи програми помістилась в один рядок коду.

Умовний оператор switch

Конструкція switch дозволяє порівняти значення одразу з декількома варіантами.

Розглянемо код, який конвертує оцінку п’ятибальної шкали у текстову форму:

Console.Write("Введіть оцінку від 1 до 5: ");
var r = Convert.ToByte(Console.ReadLine());
string v;
if (r == 1 || r == 2)
{
    v = "Незадовільно";
}
else if (r == 3)
{
    v = "Задовільно";
}
else if (r == 4)
{
    v = "Добре";
}
else if (r == 5)
{
    v = "Відмінно";
}
else
{
    v = "Помилка";
}
Console.WriteLine(v);

З використанням switch код буде виглядати так:

switch (r)
{
    case 1:
    case 2:
        v = "Незадовільно"; //цей код виконується якщо r рівний 1 або 2
        break;
    case 3:
        v = "Задовільно";
        break;
    case 4:
        v = "Добре";
        break;
    case 5:
        v = "Відмінно";
        break;
    default:
        v = "Помилка";
        break;
}

Вираз відповідності в дужках після switch, порівнюється з варіантами(мітками), які розміщені за ключовим словом case. Якщо вони співпадають, то виконуються інструкції до оператора break, який вказує на те, що необхідно вийти з блоку switch. У випадку, коли порівнюване значення не співпадає із жодним з варіантів, виконується блок default.

Для переходу з одного блоку case в інший, можна використовувати оператор goto case:

var s = "a";
var t = 1;
switch (s)
{
    case "a":
        t += 10;
        goto case "c";
    case "b":
        t += 100;
        break;
    case "c":
        t += 1000;
        break;
}
// після виходу t = 1011;

Блок default не обов’язковий. Якщо він не вказаний, а відповідності немає, то відбудеться вихід з switch.

Використання break після операторів return, throw та goto case не обов’язкове.

Починаючи з C# версії 7.0, вираз відповідності може бути будь яким виразом відмінним від null. В попередніх версіях мови, допускалися тільки: цілочислові, символьні, рядкові, логічні типи.

Дивіться також: