为什么有些语言要把类型放在后面


越来越多的语言把类型放在变量的后面来定义,例如 Go 语言的变量申明:

var x int
var p *int
var a [3]int

这种做法并不是为了与众不同,而是为了更加清楚得将变量和变量类型区分开来,避免它们混淆在一起。

下面是 Go 语言一个函数变量的申明(相当于 C 语言里的函数指针):

var f func(func(int,int) int, int) func(int, int) int // f 是变量,f 后面是变量类型

上面的声明读起来很清晰,自左向右,究竟哪一个变量名是当前被声明的也容易看出来——因为变量名永远在首位(var 标识除外)。

但是,如果是 C 语言做同样的定义:

int (*(*fp)(int (*)(int, int), int))(int, int);

变量名被淹没在层层括号和星号之中,变量和类型混淆在一起,难以理解!这就是很多人对 C 语言产生心理阴影的地方。

再看指针和切片的定义,也很容易将变量和变量类型区分开了:

var p *int     // p 是变量, *int 是类型
var a []int    // a 是变量,[]int 是类型

闭包也变得更简单:

var c = func(a, b int) int { return a+b } (3, 4)

前一篇:
后一篇:

发表评论