Я Красавчег
Мыслитель
(7612)
4 года назад
В языках программирования зачастую есть приоритеты операций. Например логическое И сработает раньше чем логическое ИЛИ (это для с++). И вот когда программист не уверен что сработает раньше и лень читать в интернете он ставит дополнительные скобочки что бы однозначно обозначить приоритет операции (скобочка имеет один из высоких но не наивысший для с++ приоритет). В данном случае, я так понимаю, программист хотел убедится что отрицание "!" будет выполняться раньше чем логическое И
dim565
Искусственный Интеллект
(423793)
4 года назад
В вашем примере круглые ни на что не влияют и лично я не вижу смысла использовать варианты кроме первого.
Круглые скобки внутри if нужны, когда условий больше двух + используется оператор ИЛИ.
Например:
<?php
$a = 1;
$b = 2;
$c = 3;
if ($a == 1 || $b == 5 && $c == 6) echo 'true';
?>
Покажет true т. к PHP достаточно, что переменная $a == 1, но если добавить круглые скобки:
if (($a == 1 || $b == 5) && $c == 6) echo 'true';
условие не выполнится т. к переменная $c не равна 6
Я КрасавчегМыслитель (7612)
4 года назад
if ($a == 1 || $b == 5 && $c == 6) echo 'true'; Пыха не знаю но в си++ такое бы выражние выполнялось так:
Сначала бы отработало логическое И операция вернула бы false.
Потом отработало логическое ИЛИ и при проверки первой переменой a==1 прекратило бы дальнейшую проверку и вернуло true.
То есть обязательно нужно смотреть приоритеты операций. И да в с++ нет знака $ я просто не стал менять синтаксис так как понимаю что это не с++.
Саня Семенов
Оракул
(60426)
4 года назад
Потому что скобки это необязательный оператор. Единственное что они делают изменяют приоритет. а для того чтобы сравнение работало с операндом И т к у него тоже высокий приоритет его операнды принято брать в скобки иначе оно не правильно считается - например если написать это выражение без скобок ( (2+ 3)>(2 &$toggle) ) то оно посчитается так как расставлены скобки а нужно так ( (2+ 3>2) &($toggle) ). Но только в одном случае скобки действительно необходимо в других можно использовать приоритеты но задумываться над этим никто не хочет и осень часто народ не думает какие там операнды и все равно пишет их со скобками так получаются лишние скобки они впринципе для программы безвредные немного запутывают правда
Собственно сами примеры:
if (empty($subject) && empty($text)) - тут вроде все более-менее понятно.
if (empty($subject) && (!empty($text))) - почему тут! empty в дополнительных скобках?
if ((!empty($subject)) && empty($text)) - аналогично, почему и тут! empty в доп. скобках?
можно ли было бы обойтись без этих скобок?
Всем добра!