да
Вы должны всегда использовать круглые скобки ... вы не контролируете порядок приоритета ... разработчик компилятора делает. Вот история, которая произошла со мной о неиспользовании скобок. Это затронуло сотни людей в течение двух недель.
Реальная причина мира
Я унаследовал приложение основного кадра. Однажды, из чистого синего это перестало работать. Вот и все ... Боже, он просто остановился.
Моя работа состояла в том, чтобы заставить его работать как можно быстрее. Исходный код не изменялся в течение двух лет, но внезапно он просто прекратился. Я попытался скомпилировать код, и он разбился на строке XX. Я посмотрел на строку XX, и я не мог сказать, что заставит линию XX разорваться. Я попросил подробные спецификации для этого приложения, и не было ни одного. Линия XX не была виновником.
Я распечатал код и начал просматривать его сверху вниз. Я начал создавать блок-схему того, что происходило. Код был настолько запутанным, что я едва мог понять его. Я бросил пытаться построить блок-схему. Я боялся вносить изменения, не зная, как это изменение повлияет на остальную часть процесса, тем более что у меня не было подробностей о том, что приложение делало или где оно находилось в цепочке зависимостей.
Итак, я решил начать с верхней части исходного кода и добавить whitespce и линейные тормоза, чтобы сделать код более читабельным. Я заметил, что в некоторых случаях были условия, которые объединялись, AND
и OR
не было четкого различия между тем, какие данные AND
редактировались и какие данные OR
редактировались. Поэтому я начал ставить круглые скобки вокруг условий AND
и OR
условий, чтобы сделать их более читабельными.
Когда я медленно спускался, убирая это, я периодически сохранял свою работу. Однажды я попытался скомпилировать код, и случилось нечто странное. Ошибка перепрыгнула через исходную строку кода и теперь была еще ниже. Поэтому я продолжал, speparating AND
и OR
условие с круглыми скобками. Когда я закончил убирать это, это сработало. Пойди пойди
Затем я решил посетить операционную мастерскую и спросить их, устанавливали ли они недавно какие-либо новые компоненты на основной раме. Они сказали да, мы недавно обновили компилятор. Хммм.
Оказывается, старый компилятор вычислял выражение слева направо независимо. Новая версия компилятора также оценивала выражения слева направо, но неоднозначный код, что означало неясное сочетание AND
и OR
не могло быть разрешено.
Урок, который я извлек из этого ... ВСЕГДА, ВСЕГДА, ВСЕГДА используйте парены для разделения AND
условий и OR
условий, когда они используются в сочетании друг с другом.
Упрощенный пример
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(код завален несколькими из них)
Это упрощенная версия того, с чем я столкнулся. Были еще условия с составными логическими утверждениями.
Я помню, как это повлияло на:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
Я не мог переписать его, потому что не было никаких спецификаций. Первоначальный автор давно ушел. Я помню сильное давление. Весь грузовой корабль оказался в порту и не мог быть выгружен, потому что эта маленькая программа не работала. Нет предупреждения Без изменений в исходном коде. Меня осенило только спросить Сетевые Операции, изменили ли они что-нибудь, после того, как я заметил, что добавление паренсов сместило ошибки