代码中将变量与值的判断顺序颠倒(如0 == intValue)有何益处?
为什么会有
if (0 == intValue)这种“反常规”的写法? 这种写法是防御性编程的典型技巧,核心目的是避免低级的赋值错误,具体原因如下:
防止误写赋值语句:在C、C++这类允许在条件表达式中使用赋值操作的语言里,很容易把判断相等的
if (intValue == 0)不小心写成if (intValue = 0)。后者是合法代码——它会把0赋值给intValue,然后判断这个赋值表达式的结果(也就是0,对应逻辑假),这会导致完全不符合预期的逻辑错误,而且这类错误有时候很难快速排查。但如果写成if (0 == intValue),一旦误写成if (0 = intValue),编译器会直接报错,因为常量不能被赋值,这样就能在编译阶段就把问题揪出来。可读性的权衡:你觉得它违背常规思维是正常的,毕竟自然语言里我们会说“如果intValue等于0”,而非“如果0等于intValue”。但对于习惯这种写法的资深开发者来说,他们更看重避免潜在的bug,而非第一眼的“自然感”。不过随着现代编译器对
if (var = val)这类写法会主动发出警告,这种防御性写法的必要性已经降低了很多。
内容的提问来源于stack exchange,提问作者Joseph Erickson
相关产品推荐
相关产品推荐

