冗余'if'语句少

Joh*_*Joe 1 if-statement kotlin

我的代码如下

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

编译器告诉我

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

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

Lin*_*ica 8

表格中的所有陈述:

if(condition){
    return false
} else {
    return true
} 
Run Code Online (Sandbox Code Playgroud)

可以简化为:

return !condition
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,它将导致:

return !(etReportRow1.text.toString() == "" || etReportRow2.text.toString() == "" || etReportRow3.text.toString() == "")
Run Code Online (Sandbox Code Playgroud)

要么:

return 
    etReportRow1.text.toString().isNotEmpty() && 
    etReportRow2.text.toString().isNotEmpty() && 
    etReportRow3.text.toString().isNotEmpty()
Run Code Online (Sandbox Code Playgroud)

注意:这isNotEmpty()是一种扩展方法:

public inline fun CharSequence.isNotEmpty(): Boolean = length > 0
Run Code Online (Sandbox Code Playgroud)

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

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


Rob*_*sen 5

因为布尔表达式的计算结果为布尔值,所以您只需返回表达式本身的结果,而无需显式返回truefalse.

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

 private fun validateInput() = etReportRow1.text.toString() != "" && 
                               etReportRow2.text.toString() != "" &&
                               etReportRow3.text.toString() != ""
Run Code Online (Sandbox Code Playgroud)

  • 它不会与OP的代码返回相反的值吗? (2认同)