- 編程與類型系統
- (美)弗拉德·里斯庫迪亞
- 653字
- 2021-01-29 11:51:24
1.2.5 可讀性
讀代碼的時間往往比寫代碼的時間更多。類型能夠清晰表明函數期望得到什么實參,泛型算法的先決條件是什么,類實現了哪個接口,等等。這些信息很有用,因為它允許我們單獨思考可讀的代碼:只需查看定義,我們就能夠比較輕松地理解代碼的工作方式,而不必去源代碼中查看調用者和被調用者。
名稱和注釋對于理解代碼也很重要,但是類型則添加了另外一層信息,因為它允許我們指定約束。看看程序清單1.11中沒有指定類型的find()函數的聲明。
程序清單1.11 未類型化的find()

單純看這個函數,很難明白它期望得到什么類型的實參。我們需要閱讀其實現,傳入我們認為最有可能的類型的實參,然后看是否會發生運行時錯誤,或者我們需要寄希望于文檔中介紹了相關信息。
將前面的聲明與程序清單1.12進行一下比較。
程序清單1.12 類型化的find()

從這個聲明中可以看到,對于任意類型T,我們需要提供一個數組T[]作為range實參,提供一個接受T作為參數并返回一個boolean值的函數作為p實參。我們還可以馬上看到,這個函數將返回T或者undefined。
我們不必找到函數實現或者查看文檔,只需閱讀這個聲明,就可以知道應該傳遞什么類型的實參,這就降低了認知負擔,使我們可以把它作為一個自包含的、獨立的實現來對待。像這樣明確指定的類型信息不僅可被編譯器利用,開發人員也可以參考,這使理解代碼變得簡單了許多。
大多數現代語言都提供了一定程度的類型推斷,即基于上下文來推斷變量的類型。這可以減少冗余輸入,所以很有用,但是當編譯器能夠輕松理解代碼,而人卻很難理解時,類型推斷就會成為問題。明確指定的類型比注釋更有幫助,因為編譯器會確保類型正確。
推薦閱讀
- Mastering NetBeans
- jQuery從入門到精通 (軟件開發視頻大講堂)
- Mastering Kali Linux for Web Penetration Testing
- Visual Basic程序設計習題解答與上機指導
- Linux命令行與shell腳本編程大全(第4版)
- Mastering Business Intelligence with MicroStrategy
- Service Mesh實戰:基于Linkerd和Kubernetes的微服務實踐
- INSTANT Silverlight 5 Animation
- Web性能實戰
- 運維前線:一線運維專家的運維方法、技巧與實踐
- OpenCV 3計算機視覺:Python語言實現(原書第2版)
- Scala編程實戰
- Practical GIS
- Clojure High Performance Programming(Second Edition)
- LabVIEW數據采集