為什么動(dòng)態(tài)類(lèi)型編程語(yǔ)言會(huì)如此流行?
我使用過(guò)很多靜態(tài)類(lèi)型的編程語(yǔ)言,也使用過(guò)不少動(dòng)態(tài)類(lèi)型的語(yǔ)言。我發(fā)現(xiàn),當(dāng)使用靜態(tài)類(lèi)型的語(yǔ)言時(shí),各種的IDE給了我巨大的幫助。這些編程語(yǔ)言集成 開(kāi)發(fā)環(huán)境能讓我的開(kāi)發(fā)極其的高效。代碼的修改和移動(dòng)(例如重構(gòu)代碼)都非常的方便,不容易出現(xiàn)錯(cuò)誤。編譯速度通常不是問(wèn)題。IDE的自動(dòng)編譯功能使得在我 每敲完幾個(gè)代碼后都能得到編譯好的程序。文檔提示和變量、方法、類(lèi)提示在我輸入變量時(shí)會(huì)自動(dòng)彈出。所有的這些都能夠使我把全身心注意力都投入寫(xiě)代碼中。
相反,編程語(yǔ)言的類(lèi)型越動(dòng)態(tài),我就越無(wú)法借助于IDE的幫助,通常在使用動(dòng)態(tài)類(lèi)型編程語(yǔ)言開(kāi)發(fā)程序時(shí),我只能使用一個(gè)文本編輯器。編程效率受此的影 響而下降很多。代碼重構(gòu)變得困難,甚至完全不可能,程序的正確性嚴(yán)重的依賴(lài)單元測(cè)試。但測(cè)試程序并非能做到***。很多時(shí)候,一些老的、歷史遺留的項(xiàng)目中的 測(cè)試程序根本不可信。
在文本編輯器中依靠grep來(lái)重構(gòu),就是個(gè)笑話(huà)。即費(fèi)事,又費(fèi)力,而且效率不高,經(jīng)常出錯(cuò)。然而,重構(gòu)是很多程序員經(jīng)常、大量需要做的事情。
動(dòng)態(tài)類(lèi)型語(yǔ)言通常會(huì)在速度上有些欠缺——因?yàn)樗膭?dòng)態(tài)屬性。
使用動(dòng)態(tài)編程語(yǔ)言開(kāi)發(fā)的過(guò)程中,我通常會(huì)嚴(yán)重的依賴(lài)文檔來(lái)決定應(yīng)該使用哪一個(gè)方法或提供了哪些方法。如果一個(gè)類(lèi)沒(méi)有提供文檔說(shuō)明,我必須打開(kāi)源代 碼,搜索整個(gè)文件,來(lái)了解它提供的功能。有時(shí),一個(gè)代碼庫(kù)里包含了成百上千的代碼文件。很顯然,我是沒(méi)法記住在這樣的一個(gè)代碼庫(kù)里哪些文件包含了哪些方法 和類(lèi)。因此,我不得不頻繁的打開(kāi)一個(gè)又一個(gè)文件,經(jīng)常出現(xiàn)找來(lái)找去也找不到某個(gè)方法究竟是在哪個(gè)文件里。于是,我只能使用grep來(lái)搜索整個(gè)項(xiàng)目庫(kù)文件。
我能想出很多的靜態(tài)類(lèi)型語(yǔ)言的優(yōu)點(diǎn)和好處,但對(duì)于動(dòng)態(tài)編程語(yǔ)言,我總結(jié)不出多少有點(diǎn),但很顯然,有很多人非常的喜歡動(dòng)態(tài)編程語(yǔ)言,為什么?
一個(gè)答案就是動(dòng)態(tài)語(yǔ)言通常更方便開(kāi)發(fā)較小的項(xiàng)目,因?yàn)榭梢詿o(wú)需聲明類(lèi)型而節(jié)省了很多麻煩。另外一個(gè)答案是,動(dòng)態(tài)類(lèi)型解除了程序員的束縛,可以***的 發(fā)揮程序員的編程技能,能最有效的利用編程語(yǔ)言里的各種特征和模式。但這些能力都是一把雙刃劍,更多的依賴(lài)于程序員的個(gè)人才能,如果用不好,或用的過(guò)度, 都會(huì)產(chǎn)生負(fù)面的害處。
你認(rèn)同我的觀點(diǎn)嗎?
英文原文:Why is dynamic typing so popular?
譯文出處:程序師網(wǎng)