在 Kotlin 中同时定义多个变量(例如 Java 中的 String x,y,z;)

82
我想知道在 Kotlin 中是否有一种像 Java 和世界上几乎所有其他编程语言那样定义多个变量的方法。
像在 Java 中一样:
String x = "Hello World!", y = null, z;

4
这似乎是一个很好的例子,说明在Java中非常优雅的声明多个变量而不是属性,在Kotlin中却啰嗦且笨拙。 - LarsH
3
与重复的问题相关联的是有关 属性 的问题。因此,它不是关于 变量 的这个问题的重复。投票要求 重新开放。声明无法在一行上声明多个属性的答案并不意味着无法在一行上声明多个变量。 - LarsH
1
@LarsH 哇,我自己甚至没有想到那个。感谢您的贡献。 - Seaskyways
1
@LarsH 感谢您的评论。我已更新被接受的答案,以澄清关于变量和属性的问题。 - marcelovca90
实际上,这就是为什么 Kotlin 出现的原因,以使程序员的生活更加轻松,并避免空值,以尽可能消除错误。因此,在这种情况下,“String x,y,z;”将毫无意义... - F.Mysir
3个回答

93

你可以使用分号 (;) 在同一行中声明(并赋值)多个变量

val number = 42; val message = "Hello world!";

在同一行中,你也可以类似地声明(和赋值)多个属性

class Example {
    var number = 42; var message = "Hello world!";
}

一个可运行的示例展示了你可以在 tio.run ( 它也可以在我的本地环境中使用 Kotlin 版本 1.1.2-5 (JRE 1.8.0_144-b01) 运行良好):

class Example {
    // declaring multiple properties in a single line
    var number:Int; var message:String;

    // constructor that modifies the parameters to emphasize the differences
    constructor(_number:Int, _message:String) {
        number = _number * 2
        message = _message.toUpperCase()
    }
}

fun main(args: Array<String>) {
    // declaring multiple read-only variables in a single line
    val number = 42; val message = "Hello world!";
    
    // printing those local variables
    println("[main].number = " + number)
    println("[main].message = " + message)
    
    // instantiating an object and printing its properties' values
    val obj = Example(number,message)
    println("[Example].number = " + obj.number)
    println("[Example].message = " + obj.message)
}

执行输出:

[main].number = 42
[main].message = Hello world!
[Example].number = 84
[Example].message = HELLO WORLD!

值得注意的是,在这个问题和答案中,JetBrains的工程师yole指出:

“在同一行上声明多个属性被许多Java样式指南所反对,因此我们没有在Kotlin中实现该功能。”

请注意,他的回答已经超过4年了,因此可能会有变化。


67
虽然 val (x, y) = arrayOf(20, "Hello") 是可行的,但需要注意的是,在解构赋值时,变量类型需要与数组中的元素类型匹配。 - Venkata Raju
5
即使在Java中,一行声明多个变量真的是不良实践吗?我认为有些情况下它可以减少冗余代码。 - Manish Chandra Joshi
9
这相当愚蠢。Kotlin被认为是简洁的,而Java基本上不赞成任何简洁的东西...毫无意义。 - Hasen
2
val(x,y) = listOf(20,"Hello") 看起来为了在一行代码上初始化多个变量而分配列表是不良实践。 - Graham
4
Kotlin 不允许在同一行上声明多个 属性,这并不能回答是否允许声明多个 变量 的问题...除非有人提供信息表明 Kotlin 中的所有变量都是属性。 - LarsH
显示剩余10条评论

36

试试这个:

fun main() {
    val (x, y, z) = listOf(1, true, "Sam")    //can be "arrayOf(), "Pair()" or other types
    println("$x, $y, $z")
}

输出:

1, true, Sam

1
这是利用解构声明的优势。 - Adam Millerchip
5
确实,如果你只有两个变量,你可以使用Pair来表示:val (a, b) = "a" to "b" - Jamie Craane

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接