kotlin - 如何简化 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 有没有办法简化这种表达方式?
解决方案
感谢所有参与的人!这是带有注释的代码的最终版本:
student?.run {
firstName == "John" &&
lastName == "Smith" &&
age == 20 &&
homeAddress == "45 Boot Terrace" &&
cellPhone.orEmpty().startsWith("123456")
} ?: false
- 作用域函数
run {}
在对象上被调用student
equals
替换==
为比较布尔值和null
值- 作用域函数的返回类型可以为空,所以使用了 elvis 运算符
?: false
。另一种选择是使用== true
,但这是您的个人喜好
推荐阅读
- javascript - 理解 Javascript 函数中属性的执行
- php - Yii2 根据条件添加规则
- selenium - 即使我们有很多方法,我们是否应该在 selenium 关键字驱动的框架中拥有一个动作类?
- python - 在 pytorch 中为 CNN 设置自定义内核
- jdbc - Databricks 使用 ActiveDirectoryPassword 连接到 Azure SQL DB 时出错
- javascript - ng-disabled 不禁用 html 元素
- java - EditText 中 DrawableLeft 的 OnClickListener?
- c++ - 使用三重指针将数组作为参数
- wpf - Windows 10 磁力链接上的安全消息
- html - 按钮丢失或在身体之外