官术网_书友最值得收藏!

1.2.5 可讀性

讀代碼的時間往往比寫代碼的時間更多。類型能夠清晰表明函數期望得到什么實參,泛型算法的先決條件是什么,類實現了哪個接口,等等。這些信息很有用,因為它允許我們單獨思考可讀的代碼:只需查看定義,我們就能夠比較輕松地理解代碼的工作方式,而不必去源代碼中查看調用者和被調用者。

名稱和注釋對于理解代碼也很重要,但是類型則添加了另外一層信息,因為它允許我們指定約束。看看程序清單1.11中沒有指定類型的find()函數的聲明。

程序清單1.11 未類型化的find()

單純看這個函數,很難明白它期望得到什么類型的實參。我們需要閱讀其實現,傳入我們認為最有可能的類型的實參,然后看是否會發生運行時錯誤,或者我們需要寄希望于文檔中介紹了相關信息。

將前面的聲明與程序清單1.12進行一下比較。

程序清單1.12 類型化的find()

從這個聲明中可以看到,對于任意類型T,我們需要提供一個數組T[]作為range實參,提供一個接受T作為參數并返回一個boolean值的函數作為p實參。我們還可以馬上看到,這個函數將返回T或者undefined

我們不必找到函數實現或者查看文檔,只需閱讀這個聲明,就可以知道應該傳遞什么類型的實參,這就降低了認知負擔,使我們可以把它作為一個自包含的、獨立的實現來對待。像這樣明確指定的類型信息不僅可被編譯器利用,開發人員也可以參考,這使理解代碼變得簡單了許多。

大多數現代語言都提供了一定程度的類型推斷,即基于上下文來推斷變量的類型。這可以減少冗余輸入,所以很有用,但是當編譯器能夠輕松理解代碼,而人卻很難理解時,類型推斷就會成為問題。明確指定的類型比注釋更有幫助,因為編譯器會確保類型正確。

主站蜘蛛池模板: 万源市| 湾仔区| 德兴市| 伊春市| 襄樊市| 炉霍县| 孟连| 岫岩| 堆龙德庆县| 威宁| 西安市| 蒙阴县| 海宁市| 湟源县| 宜丰县| 厦门市| 雅安市| 河间市| 贵州省| 集安市| 平昌县| 土默特左旗| 洛浦县| 隆尧县| 涪陵区| 北票市| 贵州省| 海林市| 沙洋县| 迁西县| 金坛市| 大港区| 石城县| 南岸区| 叙永县| 西乡县| 甘德县| 鸡泽县| 商都县| 竹溪县| 灵武市|