Условные выражения представляют собой некоторое условие и возвращают значение типа bool, то есть значение true (если условие истинно), или значение false (если условие ложно). К условным выражениям относятся операции сравнения и логические операции.
В операциях сравнения сравниваются два операнда, и возвращается значение типа bool
- true
, если выражение верно,
и false
, если выражение неверно.
==
сравнивает два операнда на равенство и возвращает true
(если операнды равны) и false
(если операнды не равны)
int a = 10; int b = 4; bool c = a == b; // false bool d = a == 10; // true
!=
сравнивает два операнда и возвращает true
, если операнды НЕ равны, и false
, если операнды равны
int a = 10; int b = 4; bool c = a != b; // true bool d = a != 10; // false
< (меньше чем)
Возвращает true
, если первый операнд меньше второго, иначе возвращает false
int a = 10; int b = 4; bool c = a < b; // false bool d = a < 23; // true
> (больше чем)
Возвращает true
, если первый операнд больше второго, иначе возвращает false
int a = 10; int b = 4; bool c = a > b; // true bool d = a > 23; // false
>= (больше или равно)
Возвращает true
, если первый операнд больше второго или равен второму, иначе возвращает false
bool c = 10 >= 10; // true bool b = 10 >= 4; // true bool d = 10 >= 20; // false
<= (меньше или равно)
Возвращает true
, если первый операнд меньше второго или равен второму, иначе возвращает false
bool c = 10 <= 10; // true bool b = 10 <= 4; // false bool d = 10 <= 20; // true
Кроме того, в языке Dart есть логические операции, которые также представляют условие и возвращают true или false и обычно объединяют несколько операций сравнения. К логическим операциям относят следующие:
|
c=a|b;
(c равно true
, если либо a, либо b (либо и a, и b) равны true
, иначе c будет равно false
)
&
c=a&b;
(c равно true
, если и a, и b равны true
, иначе c будет равно false
)
!
c=!b;
(c равно true
, если b равно false
, иначе c будет равно false
)
^
c=a^b;
(c равно true
, если либо a, либо b (но не одновременно) равны true
, иначе c будет равно false
)
||
c=a||b;
(c равно true
, если либо a, либо b (либо и a, и b) равны true
, иначе c будет равно false
)
&&
c=a&&b;
(c равно true
, если и a, и b равны true
, иначе c будет равно false
)
Здесь у нас две пары операций |
и ||
(а также &
и &&
) выполняют
похожие действия, однако же они не равнозначны.
Выражение c=a|b;
будет вычислять сначала оба значения - a и b и на их основе выводить результат.
В выражении же
c=a||b;
вначале будет вычисляться значение a, и если оно равно true
, то вычисление значения b уже смысла не имеет,
так как у нас в любом случае уже c будет равно true
. Значение b будет вычисляться только в том случае, если a равно false
То же самое касается пары операций &/&&
. В выражении c=a&b;
будут вычисляться оба значения - a и b.
В выражении же c=a&&b;
сначала будет вычисляться значение a,
и если оно равно false
, то вычисление значения b уже не имеет смысла, так как значение c в любом случае равно false
.
Значение b будет вычисляться только в том случае, если a равно true
Таким образом, операции ||
и &&
более удобны в вычислениях, позволяя сократить время на вычисление значения выражения и тем самым повышая
производительность. А операции |
и &
больше подходят для выполнения поразрядных операций над числами.
Примеры:
bool a1 = (5 > 6) || (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true bool a2 = (5 > 6) || (4 > 6); // 5 > 6 - false, 4 > 6 - false, поэтому возвращается false bool a3 = (5 > 6) && (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается false bool a4 = (50 > 6) && (4 / 2 < 3); // 50 > 6 - true, 4/2 < 3 - true, поэтому возвращается true bool a5 = (5 > 6) ^ (4 < 6); // 5 > 6 - false, 4 < 6 - true, поэтому возвращается true bool a6 = (50 > 6) ^ (4 / 2 < 3); // 50 > 6 - true, 4/2 < 3 - true, поэтому возвращается false