多余的“ if”语句较少

时间:2019-01-11 09:39:47

标签: if-statement kotlin

我的代码如下

 private fun validateInput(): Boolean {
     if (etReportRow1.text.toString() == "" 
         || etReportRow2.text.toString() == "" 
         || etReportRow3.text.toString() == "")
         return false
     else
         return true
 }

编译器告诉我

  

多余的'if'语句较少...(Ctrl + F1)此检查报告是否   可以简化为单个语句的语句。例如:   if(foo()){return true} else {return false}可以是   简化为返回foo()。

建议的代码不会进入循环吗?

5 个答案:

答案 0 :(得分:8)

所有形式的陈述:

if(condition){
    return false
} else {
    return true
} 

可以简化为:

return !condition

所以在您的情况下,它会导致:

return !(etReportRow1.text.toString() == "" || etReportRow2.text.toString() == "" || etReportRow3.text.toString() == "")

或者:

return 
    etReportRow1.text.toString().isNotEmpty() && 
    etReportRow2.text.toString().isNotEmpty() && 
    etReportRow3.text.toString().isNotEmpty()

注意:isNotEmpty()是扩展方法:

public inline fun CharSequence.isNotEmpty(): Boolean = length > 0

为避免重复的代码,您还可以使用Sequence

public fun validateInput() = sequenceOf(etReportRow1, etReportRow2, etReportRow3)
    .map { it.text.toString() }
    .all { it.isNotEmpty() }

答案 1 :(得分:5)

由于布尔表达式的计算结果为布尔值,因此您可以简单地返回表达式本身的结果,而不必显式返回truefalse

您可以使用以下单一表达式功能进一步简化操作:

 private fun validateInput() = etReportRow1.text.toString() != "" && 
                               etReportRow2.text.toString() != "" &&
                               etReportRow3.text.toString() != ""

答案 2 :(得分:0)

尝试

return !(etReportRow1.text.toString() == "" || etReportRow2.text.toString() == "" || etReportRow3.text.toString() == "")

答案 3 :(得分:0)

我认为这应该可行:

private fun validateInput() = !(etReportRow1.text.toString.isEmpty()  
                                || etReportRow2.text.toString().isEmpty()
                                || etReportRow3.text.toString().isEmpty() )

答案 4 :(得分:0)

更加简洁:

public fun validateInput() = setOf(
    etReportRow1, etReportRow2, etReportRow3
).none { 
    "${it.text}".isEmpty() 
}