最好用的編程語言也許是TypeScript
大家好,我是你們懂點技術(shù)的cho老師。

今天我們來聊聊一個經(jīng)典話題——最好用的編程語言是什么?
編程語言的劃分
據(jù)百度百科顯示,有接近2500種編程語言,連漢字都可以成為編程語言 (易語言到底哪個天才想出來的)。即便是有這么多語言,其實也可以簡單劃分成兩類。一種是我在學 or 在用的,另一種是垃圾。
好吧,不開玩笑。其實,我們可以依據(jù)變量類型的處理方式,將眾多編程語言區(qū)分成兩類——靜態(tài)類型語言和動態(tài)類型語言。從名字上來看,靜態(tài)類型語言是在編譯時就已經(jīng)確定變量的類型。而動態(tài)類型語言的變量類型則要到程序運行時,變量被賦予某個值之后,才會具有某種類型,使用變量前不需要聲明其類型。這兩種方式,差別很大。
JS VS TS
以前端領(lǐng)域最著名的TS和JS為例。JavaScript 就是一門非常典型的動態(tài)類型語言,也是各位前端切圖仔最最最最熟悉的語言(之一)。JS的優(yōu)點很明顯——比如簡單、安全、具備動態(tài)性、跨平臺性。

但是 JavaScript 作為一種動態(tài)類型語言,依然存在先天缺陷。比如,無法合并類型,在編譯時缺少錯誤檢查,如果在企業(yè)和大型代碼庫中作為服務器端代碼的語言,可能會導致出錯。在大型項目開發(fā)中,JS 代碼會更顯雜亂,且調(diào)試困難。
為了解決這些缺陷,微軟又開發(fā)了 TypeScript 語言,專用于為大型項目開發(fā)而生。TS誕生之時,前端邏輯還相對比較簡單,因此部分開發(fā)者并不覺得TS實用。時過境遷,隨著最近幾年前端項目越來越復雜,各類開發(fā)者也終于轉(zhuǎn)投微軟懷抱,在項目中紛紛引入TS,并直呼“真香”。

TS好在哪里?
我們可以把 TypeScript 簡單理解為 JavaScript 的超集,可以編譯為純 JavaScript。從技術(shù)來講,TS 就是具有靜態(tài)類型的 JS。它包含了 JavaScript 的所有元素,可以載入 JavaScript 代碼運行,并擴展了 JavaScript 的語法,增加了靜態(tài)類型、類、模塊、接口和泛型等概念。
TS 類型的定義和編譯器的引入,使得 TS 可以避免 JS 無法合并類型的缺陷,以及在編譯時進行類型檢查。因此,TS 可以幫助開發(fā)者構(gòu)建更加健壯和安全的代碼。

在不嚴重破壞代碼的情況下,我們可以更輕松地避免錯誤并進行代碼重構(gòu)。除了能夠幫助我們構(gòu)建更加安全可靠的代碼之外,TS 還能幫我們進行類似 babel 的轉(zhuǎn)換。編碼過程中,我們可以盡情地使用新語法。編譯時,我們可以選擇具體編譯到哪個 JS 版本。即便不使用 TS 的類型系統(tǒng),只作為轉(zhuǎn)換工具,也是非常好用的。

因此,TS 具備很明顯的優(yōu)點:
兼容 JS 所有語法規(guī)則
讓開發(fā)者的代碼更加清晰、安全
更容易他人理解代碼與代碼重構(gòu)
在《2022 前端開發(fā)者現(xiàn)狀報告》中, 84% 的被調(diào)研者表示使用過 TypeScript。可見這門語言已被越來越多的前端開發(fā)者所接受,其熱度和應用也在不斷超越 JS 本身。
靜態(tài)語言 VS 動態(tài)語言
TS對JS的勝利,其實也是靜態(tài)語言對動態(tài)語言的勝利。動態(tài)語言和靜態(tài)語言的最大區(qū)別,在于可讀性、可維護性的不同。簡單來說,你可以把動態(tài)語言理解成一套密碼,可以通過很小的編碼量解釋非常復雜的東西。(比如通過6位數(shù)密碼保護4位數(shù)存款)我定義一個A,這個A指代的是?“國慶節(jié)連放7天”。簡潔意味著歧義,意味著更高的門檻,意味著檢查難度的提升。所以這個A也有可能指代?“回來連上7天班”。這種時候注釋就顯得非常重要。因為連程序員自己,都不記得昨天是怎么定義的這個類型。在軟盤最大容量僅為1.4M,內(nèi)存和性能可謂寸土寸金的年代,動態(tài)語言因為其語法簡潔,深受大家青睞。但進入圖形化時代后,動態(tài)語言的劣勢就很明顯了。程序越來越大,要表述的越來越多,靜態(tài)語言這種一目了然的代碼自然更受歡迎了。
TS是最好的編程語言嗎?
上面講了TS的非常多的優(yōu)點,那TS就是最好用的編程語言了嗎?并不是。TS 并不完美,甚至仍有開發(fā)者嫌棄。比如某庫開發(fā)者認為類型讓他浪費了太多時間,降低開發(fā)效率。
作為端開發(fā)者,其實我挺喜歡 TypeScript,它大大削減了手動編寫自動化測試的需求,把勞動力解放出來投入到更能創(chuàng)造價值的地方。
但從庫開發(fā)的角度來看,我又很討厭 TypeScript。它煩人的地方很多,但歸根結(jié)底,TypeScript 的原罪就是降低庫開發(fā)者的工作效率。
從本質(zhì)上講,TypeScript 就是把復雜性從端開發(fā)者那轉(zhuǎn)移給了庫開發(fā)者,最終顯著增加了庫開發(fā)流程側(cè)的工作負擔。
這個開發(fā)者說的其實也有一定的道理,其實TS也不是萬能的。TS的短板有——1. ?需要編譯,且編譯速度比較慢瀏覽器和 Node.js 并不支持 TypeScript,所以多了一步編譯操作。對于普通項目來說通常不長,其實還好。
2. 不適用于小型項目對于小型的項目,靈活的 JS 就夠了,使用 TS 反而有可能增加太多的開發(fā)成本,因為在開發(fā)時有很多的類型聲明。3. 有一定學習成本TS 引入了太多新的概念,如類型泛型等,對于開發(fā)者來說還是有著不小的學習成本。但因為兼容JS,所以語法上和 JavaScript 的語法并沒有明顯的區(qū)別,這就意味著,如果你有JS基礎,基本可以無縫編寫 TypeScript 代碼。綜合考慮,TS依舊是前端領(lǐng)域的最優(yōu)解之一。
沒有萬能的銀彈
其實不僅是前端,任何方向都有著上述問題。編程領(lǐng)域從來沒有萬能的銀彈。每種編程語言都有著自身的特性,也有其獨特的短板。只有在特定的場景應用下,才能發(fā)揮最大優(yōu)勢。

比如,Python是一門非常容易入門和上手的語言,被廣泛用于數(shù)據(jù)領(lǐng)域。但是也被人吐槽慢、執(zhí)行速度不夠快、各版本不兼容等。Java雖然是后端開發(fā)最最常用的語言,是研發(fā)領(lǐng)域最重要的工具,但同樣有部分缺點。

老鐵們常說PHP是世界上最吼的語言。但說實話,從一線城市的崗位需求來看,PHP的需求確實不如Java大,這也在側(cè)面說明了PHP本身確實有一些缺陷和問題。當然,這并不影響我們繼續(xù)信仰,來,跟我一起念出那十二個字——************!

每一種編程語言的誕生,都是因為某種需求而出現(xiàn),歸根結(jié)底,語言只是我們實現(xiàn)想法的工具。工具本身并沒有對錯,每一種技術(shù)都應該放在特定的應用場景下去討論。承認優(yōu)勢,正視短板,并不可恥。祝大家返工快樂!
