奇思妙想 · 2024年 4月 26日 0

多变量初始化

108 次浏览

除了编程语言提供的初始化赋值对多个变量初始化,连续赋值同时初始化多个相同变量。这些基本的初始化类似于:

  • int a = 1, b = 2;
  • a = b = 1;

C/ObjC/C++/VB/Java都支持如上基本的多变量统一初始化方式。

除了上面,还有一些更舒适的初始化方式:多变量分别初始化方式。

  • Swift和Rust提供tuple对多个变量初始化
    例如let (x, y) = (1, 2)会将x赋值为1,y赋值为2.
  • Go语言提供形如 x, y := 1, 2 初始化x和y两个变量,也可以实现两个变量的快速交换,如 a, b = b, a
  • Python可以直接用下面完成3个变量初始化:a, b, c = 1, 2, 3
  • C# 7.0引入解构赋值,类似tuple的多变量初始化也可以轻松完成:
    (int x, int y) = (10, 20);
    (x, y) = (1, 2);
  • JS也提供解构赋值初始化多个变量,如下示例的x, y, z可以单独使用。
    let { x, y, z } = { x: 1, y: 2, z: 3 };
  • C++虽然提供tuple元组,但初始化方式并不像下面提到的方便。

不同类型的多变量初始化

有的时候,我们想要在一行代码中初始化两个不同类型的变量:int a = 1, double b = 3.14; 如果是类型放在变量前面的编程语言一般都不能支持,但类型放在类型后面的编程语言却很容易支持。

  • C/ObjC/C++/Java/C# 均不能支持这种行为。
  • Swift 可以实现:let a: Int = 1, b: Double = 3.14
  • Go语言支持多个不同类型变量初始化,需要放在括号里面
    var (
    name string = "alex"
    age int = 28
    )

多个变量初始化只用部分

  • 尽管类似Go语言提供多个变量同时初始化,但有时又不想多个变量都要用,只想用关心的。Go语言提供空白标识符"_"来隐藏变量,此变量又被称为匿名变量,不过不能输出匿名变量。
    例如只想获取HTTP的status:
    status, _ = 200, "HTTP request is OK"