代码A很好,我希望对其进行优化,因此我编写了代码B。
我不确定代码B是否总是正确。
如果Kotlin先检查clipboard.hasPrimaryClip()
,然后再检查clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN)
,就可以了。
如果Kotlin首先检查clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN)
,然后再检查clipboard.hasPrimaryClip()
,可能会崩溃,对吗?
代码A
clipboard.addPrimaryClipChangedListener {
if (clipboard.hasPrimaryClip() ) {
if (clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN)) {
}
}
}
代码B
clipboard.addPrimaryClipChangedListener {
if (clipboard.hasPrimaryClip() && clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN) ) {
}
}
答案 0 :(得分:2)
if
条件按顺序运行。这意味着它将首先检查左侧条件,如果运算符为AND并且左侧条件返回false,则它将不会检查右侧条件。所以,可以合并两个条件。
答案 1 :(得分:1)
如评论中所述,其背后的原理称为“短路”:
短路评估[...]是某些编程语言中某些布尔运算符的语义,其中只有在第一个参数不足以确定第二个参数时才执行或评估第二个参数表达式的值。
这意味着clipboard.hasPrimaryClip()
将始终被评估。如果是false
,该条件将失败,无需进一步检查。如果是true
,则clipboard.primaryClipDescription.hasMimeType(MIMETYPE_TEXT_PLAIN)
也会被评估。