我听说一些程序员使用if(1 == var)
而不是if(var == 1)
避免意外分配。为什么或在什么情况下会导致意外分配?
问问题
144 次
2 回答
13
问题是如果您输入错误的语句:
if (var = 1)
对比
if (1 = var)
在第一种情况下,if
无条件执行之后的代码(不超过编译器的警告,编译器没有义务为您产生警告 - 但好的代码会这样做;如果您没有使用好的编译器, 得到一个!)。在第二种情况下,您在编译时遇到语法错误,因此必须在代码编译之前修复问题。
问题并不总是那么明显:
if (var = 0)
当然,从不执行 之后的代码if
。但通常,您将拥有:
if (var = function(arg1, arg2))
并且不清楚您是打算分配还是比较。您可以通过编写以下代码向编译器和代码阅读器(人类)清楚说明:
if ((var = function(arg1, arg2)) != 0)
或者
if (var == function(arg1, arg2))
我不使用“从后到前”比较技术。我不喜欢倒置的条件,因为它们几乎总是对我读“错误”。我没有将 1 与我的变量进行比较;我将我的变量与 1 进行比较。因此,即使在逻辑上==
运算符是可交换的,我也不认为可交换,而是更喜欢那种“风险更大”的方式。我还没有发现自己经常犯分配与相等错误,以至于问题成为问题。如果我确实犯了错误,编译器会警告我(我会注意警告并修复代码,以免出现问题)。
于 2012-09-22T00:19:09.173 回答
4
如果您将其输入错误
if (var = 1)
这会导致意外的(?)分配。体面的编译器会警告这一点,除非您包含一组额外的括号
if ((var = 1))
让编译器清楚你的意图。
于 2012-09-22T00:18:56.107 回答