【译】 Types are moving to the right

Types are moving to the right

原文地址

如果你看一眼上世纪(2000年以前)设计现在依旧流行的静态编程语言,你会发现其中的大多数,同时也是更受还原和主流的语言,比如说 C 语言(约 1972 年),C++(1985 年),还有 Java(1995 年),将类型写在名字的左边:

Dog   fido = ...
^^^   ^^^^
Type  Name
复制代码

当你编写大量声明时,阅读起来也很好:

int count = ...
double average = ...
List<String> strings = ...
Map<Warehouse, List<OrderItem>> items = ...
复制代码

然而,如果你看一下二十一世纪设计的现代语言,你不禁会发现,一些受欢迎的语言越来越多地将类型放在名字的右边:

为什么会发生这种事情呢?对于已经习惯于上世纪 type-name 风格的开发者而言,这似乎有点奇怪,但是现代语言设计者们仍然会冒着打破传统的风险这样做。难不成他们都是 Pascal 粉丝?

这里有一个是似而非的解释。最初,这和 Pascal(约 1970 年)的历史原因甚至 Visual Basic(1991 年)无关,真正的原因其实是我们进入了类型推导type inference)的时代。

类型推导,曾是编程语言设计中的一个小众特色,现在却成为主流。它现在也出现在我们的旧编程语言中,我们可以通过使用 varauto 关键字来省略类型。甚至在已有的编程语言中,我们也开始看到这样的代码:

var count = ...
var average = ...
var strings = ...
var items = ...
复制代码

哇!这看起来很好而且对齐。但是当类型推断类型过于复杂,或需要偶尔拼写出让人类读者理解时会发生什么?看:

var count = ...
var average = ...
var strings = ...
Map<Warehouse, List<OrderItem>> items = ...
复制代码

呃...这会打破整个代码阅读流程。因此,如果你处于类型推导时代,正在从头开始设计一门编程语言的话,然后你通过在名字右侧放置一个可选的类型批注解决了上述问题:

var count = ...
var average = ...
var strings = ...
var items: Map<Warehouse, List<OrderItem>> = ...
复制代码

现在代码看起来又很棒了。这实际上就是 Scala (2004, F# (2005), GO (2009), Rust (2010), Kotlin (2011), TypeScript (2012) 和 Swift (2014) 这些编程语言做的事情。这些编程语言之间存在许多语法差异,但是有一点是共同的——先名称后类型的顺序:

fido   Dog
^^^^   ^^^
Name   Type
复制代码

这种编写代码的方式现在正在兴起,它未来会成为主流吗?现在很难说一定会如此,但从趋势上看起来会是这样。

更多

尽管年代久远,我仍然认为 Java 是二十一世纪最伟大的语言之一。了解更多请阅读 "Tribute to Java"

如果你喜欢这个故事,那么你也可能喜欢我另一个故事 "Dealing with absence of value".

猜你喜欢

转载自juejin.im/post/5c9455d0f265da60c95b6ce9