Нужно ли знать Приоритет оператора полностью? - PullRequest
3 голосов
/ 21 января 2009

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

Ответы [ 18 ]

1 голос
/ 21 января 2009

Я с тобой на этом; использование скобок для явного определения приоритета - это всегда хорошая идея. Это делает ваш код легче для чтения, и ваши намерения являются явными.

С учетом сказанного вы должны знать, где искать информацию о приоритетах операторов, если вы поддерживаете чужой код.

0 голосов
/ 15 февраля 2013

Предполагая, что вы знаете о концепции приоритета операторов (что, как я полагаю, каждый знает, по классам математики), я бы предпочел не предполагать никаких знаний со стороны читателя ...

... за исключением здравого смысла: как уже указывалось, выражения типа a * b + c можно понять, используя знания из математических классов. Логические выражения типа a < 4 && a > 0 могут быть поняты, потому что логичнее сравнивать, чем &&.

.

С другой стороны, не существует здравого смысла смешивать побитовые операторы с обычной арифметикой, поэтому лучше использовать круглые скобки там. Также нет здравого смысла для приоритета && над || (или наоборот?), Так что используйте там круглые скобки.

0 голосов
/ 24 июня 2010

Очень легко обмануть себя, когда пишешь a == a & some_flag.

Даже если бы я предложил , а не , изучая правила приоритетов, используя скобки и временные символы для ясности (помните: код предназначен для чтения людьми ), иногда таблица приоритетов операторов пригодится.

0 голосов
/ 21 января 2009

Да Для:

  • * / + -
  • && || ИЛИ
нет

Нет / Может быть:

  • << >> & | ^
0 голосов
/ 21 января 2009

У меня никогда не было 100% контроля над правилами предшествования, потому что я работаю на нескольких языках (C, C ++, perl, bash и иногда из TCL / TK.). В разные годы на протяжении многих лет я работал с несколькими разными языками ассемблера и одним или двумя несоответствующими компиляторами.

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

0 голосов
/ 21 января 2009

Есть третий вариант. Вместо того, чтобы запоминать все эти правила, или , используя скобки, чтобы убедиться во всем ...

Если ваше выражение настолько длинное, что неясно, что произойдет первым, разбейте его на несколько строк, используя временные переменные для промежуточных результатов. Затем вы вводите ясность без суматохи скобок, и вы можете использовать описательные имена для временных переменных, чтобы сделать вещи еще более ясными.

0 голосов
/ 21 января 2009

Нет!

Если вы не уверены в приоритете, то, вероятно, любой, кто читает код, будет склонен неправильно его интерпретировать.

Если вы не уверены, просто

( .. ) 
соответствующие биты кода, то нет никакой двусмысленности для вас или кого-либо еще.
0 голосов
/ 21 января 2009

Я думаю, что важно понимать основные правила поведения. Я обнаружил, что зная мельчайшие детали не стоит времени. Главным образом потому, что любой случай, когда предшествование неоднозначно, может быть решен с помощью простого набора паренов. Во-вторых, потому что не все их знают, и лучше сделать ваш код читаемым для пользователей в вашей группе.

Когда-то в колледже я знал наизусть все правила прецедента. Оказавшись в реальном мире, я обнаружил, что большинство людей не знают их наизусть. Если я проверял какой-то действительный код, который зависел от некоторых правил предшествования, я постоянно получал ту же обратную связь: «добавьте паренсы, чтобы сделать это очевидным».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...