2010-02-13 2 views
1

Есть ли какие-либо преимущества для структурирования логические выражения, как:Каков предпочтительный порядок операндов в булевых выражениях?

if (0 < x) { ... } 

вместо

if (x > 0) { ... } 

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

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

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

ответ

3

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

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

+1

Согласен, но я бы сказал, что наиболее читаемый. –

+0

@sadboy: Я нашел 'x> 0' более читаемым, кто-то еще может найти' 0 kennytm

+0

Я просто имел в виду, как вы говорите, что это полностью субъективно, поэтому в любом контексте или ситуации, если что-то течет или читается яснее, пойдите с этим. –

0

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

0

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

Таким образом, чтобы проверить, что (0 < < х = 10):

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

вместо

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

или

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

Я нахожу, что этот шаблон делает несколько проще следовать логике.

0

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

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

сравнить с тонким жука:

if (x = 0) // assignment and not comparison. most likely a typo 
+0

Большинство компиляторов (например, 'gcc -Wall') должны иметь предупреждение для' if (x = 0) '. – kennytm

0

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

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

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

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