Поиск

Практическое применение

Ничто не доставляет столько хлопот, как поиск ошибки, допущенной только потому, что разработчик не знал правил старшинства и ассоциативности. Мне попадались сообщения в почтовых конференциях, в которых разумные вроде бы люди предлагали своего рода механизм самодокументирования — использование пробелов для указания операторов, которые, по их мнению, имеют старшинство. Например, поскольку мы знаем, что оператор умножения приоритетней оператора сложения, нам следовало бы написать примерно такой код, в котором пробелы указывают подразумеваемое старшинство:

а = b*c + d;

Такой подход в корне неверен: компилятор не может проводить корректный синтаксический анализ кода, если не определен конкретный синтаксис. Компилятор анализирует код согласно правилам, определенным разработчиками компилятора. С другой стороны, существуют круглые скобки, используемые для явного указания старшинства и ассоциативности. Например, выражение а = b * с + d можно переписать как а =( b * с) + d или как а = b * (с + d) и компилятор будет сначала вычислять выражение в скобках. Если есть несколько пар скобок, компилятор сначала вычислит выражения в скобках, а затем все выражение, основываясь на описанных правилах старшинства и ассоциативности.

Я твердо убежден, что следует всегда применять скобки, если в выражении несколько операторов. Рекомендую делать это, даже если вам понятен порядок вычислений, ведь люди, которые будут сопровождать ваш код, могут быть не такими грамотными.