Каков предпочтительный порядок для операндов в логических выражениях? - PullRequest
1 голос
/ 13 февраля 2010

Есть ли польза от структурирования логических выражений, таких как:

if (0 < x) { ... }

вместо

if (x > 0) { ... }

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

Теперь я начал писать все мои логические выражения, чтобы использовать только < или <=, даже если это означает, что переменная не является первым операндом, как в примере выше. Мне кажется, это улучшает читабельность, но это может быть только я :)

Что другие люди думают об этом?

Ответы [ 5 ]

3 голосов
/ 13 февраля 2010

Делайте то, что наиболее естественно для выражения, которое вы пытаетесь сравнить.

Если вам интересно узнать о других операциях (например, ==), есть предыдущие темы, в которых сравнивались порядки операндов для этих сравнений (и причины, по которым).

0 голосов
/ 13 февраля 2010

Честно говоря, необычно писать выражения с переменной справа, и как прямое следствие этой необычности страдает читаемость. Соглашения о кодировании имеют внутреннюю ценность просто в силу того, что они являются соглашениями; люди привыкли к тому, что код пишется определенными стандартными способами, x >= 0 является одним из примеров. Следует избегать ненужных отклонений от простых норм, подобных этим, без уважительной причины.

Тот факт, что вам пришлось «преодолеть первоначальную странность», возможно, должен быть красным флагом.

Я бы не писал 0 < x так же, как я бы не использовал венгерскую нотацию в Java. Когда в Риме, делай, как римляне. Римляне пишут x >= 0. Нет, это не так уж сложно, просто кажется, что это излишняя причудливость.

0 голосов
/ 13 февраля 2010

Преимущество первого номера в том, что он может предотвратить ошибку использования = когда требуется ==.

if ( 0 == x ) // ok
if ( 0 = x )  //is a compiler error

сравните с тонкой ошибкой:

if ( x = 0 )  // assignment and not comparison. most likely a typo
0 голосов
/ 13 февраля 2010

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

Итак, чтобы проверить это (0

 if ((0 < x) && (x <= 10)) { ... }

вместо

 if ((0 < x) && (10 >= x)) { ... }

или

 if ((x > 0) && (10 >= x)) { ... }

Мне кажется, что с этим шаблоном проще следовать логике.

0 голосов
/ 13 февраля 2010

В основном это делается для того, чтобы избежать проблемы использования = вместо == в if условиях. Для обеспечения согласованности многие люди используют то же самое для других операторов. Я не вижу никаких проблем в этом.

...