原文地址java
若是你看一眼上世纪(2000年之前)设计如今依旧流行的静态编程语言,你会发现其中的大多数,同时也是更受还原和主流的语言,好比说 C 语言(约 1972 年),C++(1985 年),还有 Java(1995 年),将类型写在名字的左边:编程
Dog fido = ...
^^^ ^^^^
Type Name
复制代码
当你编写大量声明时,阅读起来也很好:bash
int count = ...
double average = ...
List<String> strings = ...
Map<Warehouse, List<OrderItem>> items = ...
复制代码
然而,若是你看一下二十一世纪设计的现代语言,你不由会发现,一些受欢迎的语言愈来愈多地将类型放在名字的右边:编程语言
为何会发生这种事情呢?对于已经习惯于上世纪 type-name 风格的开发者而言,这彷佛有点奇怪,可是现代语言设计者们仍然会冒着打破传统的风险这样作。难不成他们都是 Pascal 粉丝?spa
这里有一个是似而非的解释。最初,这和 Pascal(约 1970 年)的历史缘由甚至 Visual Basic(1991 年)无关,真正的缘由实际上是咱们进入了类型推导(type inference)的时代。设计
类型推导,曾是编程语言设计中的一个小众特点,如今却成为主流。它如今也出如今咱们的旧编程语言中,咱们能够经过使用 var
和 auto
关键字来省略类型。甚至在已有的编程语言中,咱们也开始看到这样的代码:code
var count = ...
var average = ...
var strings = ...
var items = ...
复制代码
哇!这看起来很好并且对齐。可是当类型推断类型过于复杂,或须要偶尔拼写出让人类读者理解时会发生什么?看:cdn
var count = ...
var average = ...
var strings = ...
Map<Warehouse, List<OrderItem>> items = ...
复制代码
呃...这会打破整个代码阅读流程。所以,若是你处于类型推导时代,正在从头开始设计一门编程语言的话,而后你经过在名字右侧放置一个可选的类型批注解决了上述问题:blog
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) 这些编程语言作的事情。这些编程语言之间存在许多语法差别,可是有一点是共同的——先名称后类型的顺序:ip
fido Dog
^^^^ ^^^
Name Type
复制代码
这种编写代码的方式如今正在兴起,它将来会成为主流吗?如今很难说必定会如此,但从趋势上看起来会是这样。
尽管年代久远,我仍然认为 Java 是二十一世纪最伟大的语言之一。了解更多请阅读 "Tribute to Java"
若是你喜欢这个故事,那么你也可能喜欢我另外一个故事 "Dealing with absence of value".