2014-05-22 4 views
2

Некоторые кодеры будет обернуть каждое условие в своих скобках, например:Цель скобки вокруг выражений, соединенных логическим "и"

Style # 1:

bool Test(string a, string b) 
{ 
    return ((a != null) && (b != null)); 
} 

Style # 2:

bool Test(string a, string b) 
{ 
    return a != null && b != null; 
} 

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

Кто-то отметил, что № 1 выше - «старый стиль С». Какова его практическая цель? Есть ли какая-либо фактическая разница между этими двумя, или это какая-то защита от опечаток (например, запись if (true == x) вместо if (x == true)).

+29

Большинство людей, при нажатии и/или проснувшихся в 4 часа ночи, не знают * все * правила приоритета оператора наизусть все время, поэтому небольшая лексическая помощь проходит долгий путь. –

+1

В этом случае порядок операций делает два оператора (и «return a! = Null && b! = Null», без каких-либо скобок) полностью идентичны. Все три действительны и C. Я бы оставил их в этом случае, но часто бывает полезно оставить их для сложных заявлений или в которых задействовано более одного приоритета (чтобы вам не приходилось слишком много думать, особенно с более эзотерическими правилами приоритета для таких операторов, как '>>' и '%'). – Cameron

+0

Я всегда считал, что это потому, что люди изучают BODMAS в математике до того, как научиться программированию, поэтому сделайте это, чтобы обеспечить порядок исполнения, так как это то, что они впервые узнали – Sayse

ответ

11

Я думаю, что это просто защитное кодирование, поэтому автор кода (и, что более важно, будущие читатели) не сомневается в намерении и функции кода.

Давным-давно я провел много утомительных вечеров, работая по коду с коллегой, который отказался от условий, связанных с его неизменной верой в его способность запоминать правила приоритета. Несмотря на множество примеров обратного. Даже когда вы сами знаете эти правила, легче читать код, где цель кристально чиста, а не дважды проверять каждый раз.

Смежные вопросы