Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 1 · Урок 5

Условни конструкции (if / else / switch)

Как програмата прави избор. Прости и сложни условия, верижно if-else if, тернарен оператор и switch.

Защо ни трябват условия

До сега програмите ни вървяха „по права линия" — ред след ред. Но истинските задачи изискват избор: ако ученикът има 6, извеждаме „отличен"; ако е по-малък от 18, не може да гласува; ако паролата е грешна, не пускаме потребителя.

За това служат условните конструкции. Те питат за нещо (булев израз, който е true или false) и избират кой блок код да изпълнят.

Просто if

if (условие)
{
    // изпълнява се САМО ако условието е true
}

Пример:

int grade = 6;

if (grade == 6)
{
    Console.WriteLine("Отличен!");
}

Едноредови блокове

Ако в блока има само един ред, може да изпуснеш скобите. Но за начало винаги ги слагай — кодът става по-четим и по-безопасен при промени.

if … else

Когато искаш да се изпълни едното или другото:

стартусловие?даблок 1неблок 2край
Фиг. 1 — Блок-схема на if-else: условието разклонява изпълнението в два пътя
int age = 17;

if (age >= 18)
{
    Console.WriteLine("Пълнолетен");
}
else
{
    Console.WriteLine("Непълнолетен");
}

Верижно if … else if … else

За повече от два варианта подреждаме няколко условия. Изпълнява се първото, което е истина — останалите се пропускат.

int grade = 5;

if (grade == 6)
{
    Console.WriteLine("Отличен");
}
else if (grade == 5)
{
    Console.WriteLine("Много добър");
}
else if (grade == 4)
{
    Console.WriteLine("Добър");
}
else if (grade == 3)
{
    Console.WriteLine("Среден");
}
else
{
    Console.WriteLine("Слаб");
}

Внимавай за реда

Ако имаш условия като grade > 3 и grade > 4 — сложи първо > 5, после > 4, после > 3. Иначе всеки 5 ще хване > 3 и никога няма да стигнеш до по-точните проверки.

Вложени if (if в if)

Понякога вътре в един блок имаш нужда от ново условие:

int age = 16;
bool hasLicense = true;

if (age >= 16)
{
    if (hasLicense)
    {
        Console.WriteLine("Може да кара мотопед");
    }
    else
    {
        Console.WriteLine("Първо вземи книжка");
    }
}
else
{
    Console.WriteLine("Твърде малък си");
}

Често има по-чист начин

Същото може да се напише с &&:

if (age >= 16 && hasLicense)
{
    Console.WriteLine("Може да кара мотопед");
}

Но обединяването е добре, когато всички клонове правят сходни неща. Ако „else"-те се различават драстично, остави вложените if.

Тернарен оператор ?:

Кратка форма за избор на стойност (не за изпълнение на блок):

условие ? стойност-ако-true : стойност-ако-false
int age = 17;
string status = age >= 18 ? "пълнолетен" : "непълнолетен";

int a = 5, b = 7;
int max = a > b ? a : b;       // 7

Бележка

Не злоупотребявай — за сложна логика обикновеният if е по-четим. Тернарният е добър за кратки присвоявания.

switch — много варианти

Когато сравняваш една стойност с много възможни варианти, switch е по-чист от верижно if:

int day = 3;

switch (day)
{
    case 1:
        Console.WriteLine("Понеделник");
        break;
    case 2:
        Console.WriteLine("Вторник");
        break;
    case 3:
        Console.WriteLine("Сряда");
        break;
    case 4:
    case 5:
        Console.WriteLine("Четвъртък или петък");
        break;
    default:
        Console.WriteLine("Уикенд или невалидно");
        break;
}
  • case — стойност за сравнение.
  • break — край на този клон (задължителен в C#).
  • default — изпълнява се, ако никой case не съвпадне.
  • Няколко case подред означават „едното ИЛИ другото".

switch израз (C# 8+)

По-нова, по-къса форма за избор на стойност:

int day = 3;

string name = day switch
{
    1 => "Понеделник",
    2 => "Вторник",
    3 => "Сряда",
    4 or 5 => "Четвъртък или петък",
    _ => "Уикенд или невалидно"
};

Console.WriteLine(name);

_ е „всичко останало" (като default).

Кога кое да ползваш

  • if / else — за всичко, особено когато условията са сложни или различни (не една и съща променлива).
  • if / else if / else — много варианти на сложно условие.
  • switch — сравняваш една и съща стойност с много константи.
  • ?: — само за кратко присвояване на стойност.

Какво трябва да запомниш

  • if изпълнява блок само когато условието е true.
  • При else if се изпълнява първото съвпадащо условие — затова редът има значение.
  • За множествен избор по една стойност използвай switch; не забравяй break.
  • За кратко присвояване — тернарен x ? a : b.
  • Винаги ползвай скоби { } около блоковете — кодът става по-сигурен.