Условные операторы

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

Условный оператор 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. В предыдущих версиях языка допускались только: целочисленные, символьные, строковые, логические типы данных и перечисления.

Смотрите также: