结构化布尔表达式有什么好处,例如:
if (0 < x) { ... }
代替
if (x > 0) { ... }
我一直使用第二种方法,总是将变量作为第一个操作数并使用任何有意义的布尔运算符,但最近我阅读了使用第一种方法的代码,在克服了最初的怪异之后,我开始喜欢它了更多。
现在我已经开始编写我所有的布尔表达式,只使用<
或者<=
即使这意味着变量不是第一个操作数,就像上面的例子一样。对我来说,它似乎增加了可读性,但这可能只是我 :)
其他人对此有何看法?
结构化布尔表达式有什么好处,例如:
if (0 < x) { ... }
代替
if (x > 0) { ... }
我一直使用第二种方法,总是将变量作为第一个操作数并使用任何有意义的布尔运算符,但最近我阅读了使用第一种方法的代码,在克服了最初的怪异之后,我开始喜欢它了更多。
现在我已经开始编写我所有的布尔表达式,只使用<
或者<=
即使这意味着变量不是第一个操作数,就像上面的例子一样。对我来说,它似乎增加了可读性,但这可能只是我 :)
其他人对此有何看法?
对于您要比较的任何表达,做任何最自然的事情。
如果您想知道其他操作(例如==
),那么之前的主题会比较这些比较的操作数的顺序(以及原因)。
这样做主要是为了避免使用=
而不是==
在if
条件下的问题。为了保持一致性,许多人也对其他运营商使用相同的方式。我认为这样做没有任何问题。
使用最好的“阅读”。我要指出的一件事是,如果我正在测试一个值是否在界限内,我会尝试编写它,以便界限在“外部”,就像它们可能在数学表达式中一样:
因此,要测试 (0 < x <= 10):
if ((0 < x) && (x <= 10)) { ... }
代替
if ((0 < x) && (10 >= x)) { ... }
或者
if ((x > 0) && (10 >= x)) { ... }
我发现这种模式更容易遵循逻辑。
将数字放在首位的一个好处是它可以防止在需要 == 时使用 = 的错误。
if ( 0 == x ) // ok
if ( 0 = x ) //is a compiler error
与微妙的错误相比:
if ( x = 0 ) // assignment and not comparison. most likely a typo
老实说,用右侧的变量编写表达式是不寻常的,并且这种不寻常的直接后果是可读性受到影响。编码约定仅仅因为是约定而具有内在价值;人们习惯于以特定的标准方式编写代码,x >= 0
例如。在没有正当理由的情况下,应该避免不必要地偏离这些简单的规范。
您必须“克服最初的怪异”这一事实也许应该是一个危险信号。
我不会写0 < x
,就像我不会在 Java 中使用匈牙利符号一样。在罗马做到入乡随俗。罗马人写x >= 0
。不,这不是什么大不了的事,这似乎是一个不必要的小怪癖。