科技新知

JavaScript等程式語言的流行,好大一個原因是因為它很簡潔。而筆者認為,動態語言的特性,即是可以省略型別,是讓它簡潔的一個很大原因。(動態、靜態與強型別、弱型別並一定對等,詳見Ref)

動態語言的特性,就是同一個變數,在不同時候可能代表不同的數據類型,有時候是String,有時候是Integer。所以編寫時,乾脆就不寫數據類型,因為寫了也可能是白寫。

因此初學者並不需要處理大多導入(import)問題,也不用考慮很多compile error問題,至少程式可以運行一半,到了最後出錯的地方才停下,也就是不會因為型別問題而整個程式開不了。

不過筆者在接觸了JavaScript後,始終沒有大量使用。一來因為筆者慣用的Java,有著更大的基礎套件,改用JavaScript未必有優勢。而且動態語言還有一個長久的管理問題,我們該如何知道更新的影響有多大?

測試用例不是萬能藥

有一部份的人認為,動態語言管理難,是因為大家不愛寫測試用例。的確,若然大家寫的測試覆蓋率足夠多,一定可以預先發現問題。但筆者在Java上實踐了寫測試的習慣一段時間,依賴測試報錯,其實也是後知後覺。

IDE的界入

筆者認為,若想好好地管理程式碼,光寫測試是不夠的,我們還需要好好地讓IDE了解我們的程式碼,認它可以很有效地重構我們的程式碼。更強的IDE,還有機會可以提醒我們有一些設計上問題。

老實講,寫Java多的朋友,都可能都知道Intellij Ultimate的名字。筆者試用後,的確很有幫助。相較之下,vscode對於Java的支援,並不十分智能。但這裏筆者還覺得vscode對於java的編寫、重構、測試,在免費的情況下,都已經足夠是足夠佛心。對於網頁應用來講,vscode差的是對javascript的支援。

vscode對javascript的支援有限,其實不能怪它不夠努力。你想多一個免費的IDE怎樣去了解你的javascript程式?

  • 我們連型別都沒有寫出來,它能怎樣推敲?
  • 實時去模擬各種輸入?CPU又會不會耗乾?那麼寫到一半的程式碼又怎樣輸入?

直到最近筆者採用TypeScript之後,筆者看到曙光了

TypeScript - 一個變相的JavaScript的靜態型別

原本的JavaScript其實也有型別的,只是不強制。若想IDE支援,需要以特定型式寫註解。但這樣寫註解,工作量並不比引用靜態型别來得輕鬆。所以最後,筆者還是覺得直接套用TypeScript,讓自己在每一次引用參數,都要好好地先了解函數的輸入輸出型別寫法。

說實在,從JavaScript到TypeScript並不輕鬆。一些原本很無腦的Axios, Promise, Vue語句,TypeScript寫起上來,都變得很複雜。但這個套用,對於IDE來講,真的很大幫忙。它就像突然讀懂了我們的程式一樣,可以跳入跳出,可以知道在多少處被引用。重構也變得更有信心,而不是等待事後測試報錯。

有一點要補充,TypeScript並不像Java那般需要完全預先宣告型別。例如函數的回傳結果,TypeScript就不會強制要求寫出型別,因為它可以有限度地猜得出來。當然,如果大家願意宣告,就更好。

總結

總括來講,型別就像厠所的衛生情況一樣。初期當然什麼都不處理也可以,但越用越久也沒有人理會,大家也不想用下去。若然大家都願意努力維持它的品質,大家會更有意願重複使用。

參考資訊

馬交野


破.地獄
GI-DLE WORLD TOUR iDOL IN CINEMAS
DX - IU CONCERT : THE WINNING
IMAX with Laser 封神第二部:戰火西岐
隔壁的房間
工作細胞
射雕英雄傳:俠之大者
祥賭必贏
麻雀女王追男仔
臨時決鬥
封神第二部:戰火西岐
完美伴侶
IU CONCERT : THE WINNING 2025 字幕版
《七宗罪》30周年 4K IMAX 版本 限定重映
【我推的孩子】-The Final Act-
【我推的孩子】The Final Act
柏靈頓:秘魯大冒險
柏靈頓:秘魯大冒險英語版
GIDLE WORLD TOUR IDOL IN CINEMAS
IVE The 1st World Tour in Cinema
劇場版「進擊的巨人」完結篇
劇場版 「進擊的巨人」完結篇THE LAST ATTACK
劇場版 「進擊的巨人」完結篇 THE LAST ATTACK
假爸爸
劇場版 「進擊的巨人」完結篇
MX4D 超音鼠大電影3
破。鏡。慾
誤判
獅子王:木法沙
超音鼠大電影3
魔海奇緣 2
破.地獄
GI-DLE WORLD TOUR iDOL IN CINEMAS