Умовні вирази – складні логічні конструкції, в мові програмування C#, які використовуються для керування ходом виконання програми.
Умовні конструкції можуть включають в себе:
- Операції порівняння – це окрема група операторів, для порівняння значень, на вхід вони приймають два операнди однакового типу даних, а повертають логічне значення true або false;
- Логічні операції – оператори, які використовуються для роботи з логічним типом даних bool (назва в .Net нотації System.Boolean).
Операції порівняння
Оператор перевірки на рівність ==
Якщо операнди рівні, то операція порівняння вертає значення true, якщо нерівні - false.
byte x = 2;
byte y = 11;
bool b = x == 2; //true
bool c = x == y; //false
Оператор перевірки на нерівність !=
Якщо операнди нерівні, то операція порівняння повертає значення true, якщо рівні - false.
byte y = 1;
bool b = y != 2;//true
bool c = y != 1;//false
Оператор менше <
Повертає true, якщо перший операнд менший за другий, в іншому випадку false.
byte x = 42;
bool b = 40 < x;//true
bool c = 50 < x;//false
Оператор менше рівно <=
Повертає true, якщо перший операнд менший за другий, або операнди рівні, в іншому випадку false.
byte x = 18;
bool b = x <= 46;//true
bool c = x <= 18;//true
bool d = x <= 14;//false
Оператор більше >
Повертає true, якщо перший операнд більший за другий, в іншому випадку false.
byte x = 17;
bool b = x > 15;//true
bool c = x > 22;//false
Оператор більше рівно >=
Повертає true, якщо перший операнд більший за другий, або операнди рівні, в іншому випадку false.
byte x = 6;
bool b = x >= 4;//true
bool c = x >= 6;//true
bool d = x >= 8;//false
Логічні операції
Застосовуються для оперування логічним типом даних bool, приймають в якості операндів та повертають булеві значення. Зазвичай використовуються для об’єднання декілька виразів з порівнянням.
Оператор логічного заперечення !
Заперечення (логічне не) – унарна операція, яка повертає true при значенні операнда false, та false – коли значення на вході true.
var b = false;
bool c = !b; //true
bool d = !(125 == 256); //true
Оператор логічного додавання
Диз’юнкція (логічне або) – бінарна операція, яка повертає значення true, якщо хоча б один з операндів рівний true, в іншому випадку – false.
В мові C#, логічне або має дві форми запису:
- | – повна диз’юнкція, обчислює обидва операнди, навіть якщо перший дорівнює true;
- || – скорочене логічне додавання, якщо значення першого операнда true, то другий операнд не обчислюється.
bool b = (2 > 5) | (1 > 2); // false тому що, (2 > 5) - false, (1 > 2) - false
bool c = (2 < 5) | (1 < 2); // true тому що, (2 < 5) - true, (1 > 2) - false
bool d = (2 < 5) || (1 < 2); // true, оскільки (2 < 5) - true, то другий операнд не обчислюється
Оператор логічного множення
Кон’юнкція (логічне і) – бінарна операція, яка вертає значення true, якщо обидва операнди рівні true, в іншому випадку – false.
По аналогії з попередньою операцією, логічне і підтримує дві форми запису:
- & – повна кон’юнкція, обчислює обидва операнди, навіть якщо перший дорівнює false;
- && – скорочене логічне множення, якщо значення першого операнда false, то значення другого не обчислюється.
bool a = (2 < 5) & (1 < 2); // true тому що, (2 < 5) - true, (1 < 2) - true
bool b = (2 < 5) & (1 > 2); // false тому що, (2 < 5) - true, (1 > 2) - false
bool c = (1 > 4) && (1 < 2); // false, оскільки (1 > 4) - false, то другий операнд (1 < 2) не обчислюється
Для покращення продуктивності виконання програми, рекомендується використовувати скорочені форми логічних операцій “і”(&&) та “або”(||).
Оператор логічного додавання за модулем ^
Виключна диз’юнкція (операція xor) – бінарна операція, яка повертає значення true, якщо операнди не рівні, тобто один з них має значення true, а інший - false, в іншому випадку – false.
bool a = (3 < 6) ^ (4 < 8); // false тому що, (3 < 6) - true, (4 < 8) - true
bool b = (2 < 5) ^ (1 > 2); // true тому що, (2 < 5) - true, (1 > 2) - false
Логічні оператори з присвоєнням
По аналогії з арифметичними та побітовими операціями, C# дозволяє використовувати логічні оператори з присвоєнням для булевих виразів.
Операндами в них можуть виступати:
- змінні та константи булевого типу;
- конструкції порівняння;
- логічні вирази.
Логічне або з присвоєнням |=
Бінарний оператор, який присвоює лівому операнду значення його диз’юнкції з правим:
bool d = false;
d |= (1 != 2);
//альтернативна форма запису
d = d | (1 != 2);
Логічне і з присвоєнням &=
Бінарний оператор, який присвоює лівому операнду значення його кон’юнкції з правим:
bool d = true;
d &= (1 != 2);
//альтернативна форма запису
d = d & (1 != 2);
Логічне виключне або з присвоєнням ^=
Бінарний оператор, який присвоює лівому операнду результат операції xor лівого операнда з правим:
bool d = false;
d ^= (1 != 2);
//альтернативна форма запису
d = d ^ (1 != 2);
Пріоритет виконання операцій
Пріоритет | Оператор | Асоціативність |
---|---|---|
1 | ! | ліва |
2 | <, >, <=, >= | -//- |
3 | ==, != | -//- |
4 | & | -//- |
5 | ^ | -//- |
6 | | | -//- |
7 | && | -//- |
8 | || | -//- |
9 | &=, |=, ^= | права |
* Ліва асоціативність – операції виконуються зліва направо.
** Права асоціативність – справа наліво.
Як і у випадку з арифметичними операціями, пріоритет виконання у складних умовних виразах можна змінювати використовуючи дужки – “(” та “)”.