首页 > 解决方案 > 如何简化 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

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

Kotlin 有没有办法简化这种表达方式?

标签: kotlinbooleanpredicatechain

解决方案


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

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

推荐阅读