我的代码如下
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()。
建议的代码不会进入循环吗?
答案 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)
由于布尔表达式的计算结果为布尔值,因此您可以简单地返回表达式本身的结果,而不必显式返回true
或false
。
您可以使用以下单一表达式功能进一步简化操作:
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()
}