Grz*_*jos 10 java boolean readability
我已经做了近十年的Java开发,我从未见过类似[2]的表达式(见下文).我第一次在JavaScript库中看到过这种情况.
1.
if(isValid) {
statement();
}
Run Code Online (Sandbox Code Playgroud)
2.
isValid && statement();
Run Code Online (Sandbox Code Playgroud)
[1]和[2]的结果是相同的,因为statement()不会对其进行评估if isValid == false.
if语句的替代方法,我是否会有任何惊喜?编辑:
我在Groovy控制台测试了这个.我想它会使这个问题无效.无论如何,谢谢你的回复.
Tho*_*mas 21
if( isValid && statement() )仅在statement()返回a 时才有效,boolean否则条件将无法编译.这样做可能不被认为是好的设计(取决于statement实际做了什么),并可能降低可读性或使用返回值的能力statement().
除此之外只是 isValid && statement();不被支持的语言-不犯错误,以Java等语言比较像JavaScript语言,他们遵循不同的模式.
你可以做类似的事情,boolean b = isValid && statement();但如果你想以b某种方式使用价值,你通常只会这样做.
编辑:根据KRyan的要求,我还将a && b在Java和JavaScript中添加一段关于其含义及其用途的段落(虽然我不是这里的专家).
Java的
通常,您可以使用&(和)或|(或)组合两个布尔表达式.因此,true & true将导致true一样true | false,但true & false会导致false等
单字符运算符的问题是,即使您已经知道结果,也会评估每个参数.作为一个例子,当你看到false & ...你已经知道结果是false在查看第一个参数时,任何其他参数都不会产生影响.
现在,如果你有一个调用一些方法,返回一个布尔值,你可能不希望如果不需要他们执行这些方法的表达,例如,当方法本身是相当昂贵的.作为一个例子考虑needsCheckWebsite & isValueOnWebsite( "test" ).isValueOnWebsite( "test" )可能需要一段时间,如果needsCheckWebsite是假的,你不想执行该方法.
为了解决这个问题,你可以使用双字运营商&&和||,又名短路运营商.这意味着如果你写needsCheckWebsite && isValueOnWebsite( "test" ),如果needsCheckWebsite是假,那么昂贵的执行isValueOnWebsite( "test" )将不会发生,因为我们已经知道结果不会改变一件事.
因此isValid && statement()意味着statement()只应该执行isValid.
JavaScript的
JavaScript中的AFAIK短路运算符以类似的方式工作,因为它评估第一个参数,如果结果仍未知,则计算并返回第二个参数.但是,由于JavaScript是一种动态类型语言(与静态类型的Java相比),您可以混合使用不同的类型,例如var value = null || "hello",这将导致value = "hello".
这允许开发者使用&&,并||比布尔逻辑别的东西,比如由于静态类型提供一个默认值,这是不是在Java的可能(在Java中,你可以使用三元运算?为,例如,String s = input != null ? input : defaultValue但你可以看到,看起来不像JavaScript那样优雅var s = input || defaultValue.
它们不可互换:
isValid && statement();是一种表达和没有一个说法.此外,它只适用于您的statement()方法类型boolean.
因此,您只能在Java语言语法所需的(谓词)表达式中使用它.
意见:如果你在满足上述要求时使用它,那么我的确会发现它"会降低可读性".(因为它只能在某些情况下使用,再加上你自己的说法("现在几乎进行Java开发,我从未见过")没有人期待它)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |