原文地址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".