柯特林语中的"&&"和"and"有什么不同?

在我的代码中,当First Condition为FALSE时,我注意到"and"之后的条件仍然被求值,但没有以"&&"大小写进行求值.为什么会这样呢?

推荐答案

您自己回答了这个问题--如果您使用and,则计算整个表达式.

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/and.html

关于why发生的问题,这是因为and不是运算符,而是Bool类型的infix function.短路是一种编译器规则,适用于布尔运算符,而不适用于函数调用.

那么,为什么这个and函数有用呢? 在某些情况下,调用右侧表达式可能会产生副作用,并且您希望无论左侧表达式如何,这些副作用都会发生.

if (!(saveToDatabase() and writeToNoficationQueue())) {
     print("At least one thing went wrong there. Check the logs to find out.")
}

Android相关问答推荐

房间DB:UPSERT返回什么?

在卡片上创建圆角底部边框

Jetpack编写使用自定义主题覆盖库中主题部分

LocalContext.current的问题(@Composable调用只能从@Composable函数的上下文发生)

在Jetpack Compose中,如何判断屏幕是否已重新组合?

使用Jetpack Compose创建特定于电视的布局

插入视图模型时,dagger 未命中绑定错误

AndroidX Media3 迁移指南

在 Bash 脚本中使用 XMLLINT 解析 XML 单元测试文件,并将其放入数组中以表示成功和失败

Android Jetpack Compose全宽度抽屉优化

在段的中心绘制饼图(甜甜圈图)的图例

如何在 JetpackCompose 的 LazyColumn 中 Select 多个项目

组成不重叠的元素

MediumTopAppBar Material3 只更改大标题

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

如何在 Dolphin 中启用 android studio new logcat | 2021.3.1 金丝雀 6?

如何使用 ConstraintLayout 链接两个文本

为什么官方文档用大写字母表示val变量?

构成material 3 中的分隔符

如何在android studio 2021.1中使用谷歌库以外的库