如何在 Kotlin 中为多个变量分配相同的值

Mun*_*oid 5 kotlin

我有两个变量,并希望同时为这两个变量分配相同的值,如下所示:

var allGood: Boolean = false
val deviceId: String = "3550200583"
var isValidId: Boolean = false
allGood = isValidId = deviceId.length > 0 && deviceId.length <= 16
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?

gid*_*dds 6

因为赋值不是 Kotlin 中的表达式,所以不能以这种方式进行多个赋值。但还有其他方法。最明显的就是:

isValidId = deviceId.length > 0 && deviceId.length <= 16
allGood = isValidId
Run Code Online (Sandbox Code Playgroud)

更惯用(如果更长)的方式是:

(deviceId.length > 0 && deviceId.length <= 16).let {
    allGood = it
    isValidId = it
}
Run Code Online (Sandbox Code Playgroud)

(顺便说一下,您可以将条件简化为deviceId.length in 1..16。)

Kotlin 不允许这样做有几个原因。其中主要的一个,它是与语法调用名为参数的函数不兼容:fn(paramName = value)。但它也避免了=和之间的任何混淆==(否则可能会导致难以发现的错误)。另请参见此处


E.M*_*.M. 5

关于什么:

var allGood: Boolean = false
val deviceId: String = ...
val isValidId: Boolean = (deviceId.length in 1..16).also { allGood = it }
Run Code Online (Sandbox Code Playgroud)

.also 允许您使用它接收的值执行其他操作,然后返回原始值。