Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните пожалуйста разницу в расставлении круглых скобок в конструкции IF.

Shturmovik Профи (652), закрыт 4 года назад
Добрый день! Объясните пожалуйста разницу в расставлении скобок в конструкции if.

Собственно сами примеры:

if (empty($subject) && empty($text)) - тут вроде все более-менее понятно.

if (empty($subject) && (!empty($text))) - почему тут! empty в дополнительных скобках?
if ((!empty($subject)) && empty($text)) - аналогично, почему и тут! empty в доп. скобках?

можно ли было бы обойтись без этих скобок?

Всем добра!
Лучший ответ
Я Красавчег Мыслитель (7612) 4 года назад
В языках программирования зачастую есть приоритеты операций. Например логическое И сработает раньше чем логическое ИЛИ (это для с++). И вот когда программист не уверен что сработает раньше и лень читать в интернете он ставит дополнительные скобочки что бы однозначно обозначить приоритет операции (скобочка имеет один из высоких но не наивысший для с++ приоритет). В данном случае, я так понимаю, программист хотел убедится что отрицание "!" будет выполняться раньше чем логическое И
Остальные ответы
Полосатый жираф Алик Искусственный Интеллект (313002) 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.
То есть обязательно нужно смотреть приоритеты операций. И да в с++ нет знака $ я просто не стал менять синтаксис так как понимаю что это не с++.
dim565 Искусственный Интеллект (423793) Вы правы, думаю в PHP такой же принцип установки приоритета, как в C++
Саня Семенов Оракул (60426) 4 года назад
Потому что скобки это необязательный оператор. Единственное что они делают изменяют приоритет. а для того чтобы сравнение работало с операндом И т к у него тоже высокий приоритет его операнды принято брать в скобки иначе оно не правильно считается - например если написать это выражение без скобок ( (2+ 3)>(2 &$toggle) ) то оно посчитается так как расставлены скобки а нужно так ( (2+ 3>2) &($toggle) ). Но только в одном случае скобки действительно необходимо в других можно использовать приоритеты но задумываться над этим никто не хочет и осень часто народ не думает какие там операнды и все равно пишет их со скобками так получаются лишние скобки они впринципе для программы безвредные немного запутывают правда
Похожие вопросы