如何简化 Kotlin 中的谓词链

kir*_*nov 5 boolean predicate chain kotlin

我有一系列谓词子句,像这样

student?.firstName?.equals("John") ?: false &&
student?.lastName?.equals("Smith") ?: false &&
student?.age?.equals(20) ?: false &&
student?.homeAddress?.equals("45 Boot Terrace") ?: false &&
student?.cellPhone?.startsWith("123456") ?: false
Run Code Online (Sandbox Code Playgroud)

我发现可以切换到布尔谓词and()而不是&&,但总的来说,它并没有使代码更简洁。

Kotlin 有没有办法简化这样的表达?

kir*_*nov 4

感谢所有参与的人!这是带有注释的代码的最终版本:

student?.run {
  firstName == "John" &&
  lastName == "Smith" &&
  age == 20 &&
  homeAddress == "45 Boot Terrace" &&
  cellPhone.orEmpty().startsWith("123456")
} ?: false
Run Code Online (Sandbox Code Playgroud)
  1. run {}在对象上调用作用域函数student
  2. equals被替换为==比较布尔值和null
  3. 作用域函数的返回类型可以为空,因此使用 elvis 运算符?: false。另一种选择是使用== true,但这取决于您的个人喜好