我一直这样编写我的布尔表达式:
if (!isValid) {
// code
}
但我的新雇主坚持以下风格:
if (false == isValid) {
// code
}
有一个样式是首选还是标准的吗?
我一直这样编写我的布尔表达式:
if (!isValid) {
// code
}
if (false == isValid) {
// code
}
我喜欢第一种风格,因为它更自然易读。第二种风格很不寻常。
有些人可能更喜欢第二种风格的原因是:
if (isValid == false) { ... }
如果你使用后者时不小心写了一个单独的=
而不是==
,那么你正在将值赋给isValid而不是进行测试,但是如果首先使用常量,您会收到编译错误。
但是使用您的第一个建议,这个问题甚至都不是问题,所以这是更喜欢第一个建议的另一个原因。
大家都认识这个代码片段:
if (isValid.toString().lenght() > 4) {
//code
}
绝对是第一个选项。第二个选项表明对表达式和值的本质缺乏理解,并且作为编码标准的一部分,它暗示着雇主期望雇佣非常无能的程序员 - 这不是一个好兆头。
几个小时前,关于C#进行了讨论。
false == isValid
结构是从C语言世界遗留下来的,那里编译器允许您在if
语句中进行赋值。我相信Java编译器会在这种情况下发出警告。
总体而言,第二个选项过于冗长。
我认为第一个更易读,而第二个则更冗长。
我肯定会选择第一个。
你正在评估变量,而不是false
,因此从可读性的角度来看,后者是不正确的。因此我个人会坚持第一个选项。
我将尝试在这里进行全面的回答,包含了以上所有回答。
首选第一种风格,因为以下原因:
唯一的例外情况是变量是布尔类型而不是 boolean 类型。在这种情况下,第二种表达式与第一种表达式不同,当 isValid 为 null 以及 Boolean.FALSE 时都会评估为 false。如果是这种情况,则有充分的理由使用第二个表达式。
!
非运算符可能会降低可读性,甚至被忽略。密集排版、符号!
和i
的视觉上下颠倒可能会使if (!isValid)
比if (notValid)
(参见Python的not
)更难阅读。我们还可以将否定移入语义中以表达意图:if (hasViolations)
。这种设计支持异常处理,将正常路径作为默认路径(例如,仅在无效时分支和除外),否则继续执行。 - hc_dev我只想说,我二十年前在学校学习了C语言,然后转向Perl、Java和现在的C#,它们都有相同的语法...
我认为(!myvar)是最流行的
我认为(myvar==false)也很好
在20年里,我甚至从未见过
(false==myvar)
我觉得你的老板在吸毒——很抱歉,但我认为这是你的老板控制狂或笨蛋的表现。