PIECE2巨群
網頁設計 ‧ 平面設計 ‧ 虛擬主機 ‧ 網路行銷
最新消息
資訊分享
關於我們 服務項目 客戶案例 製作流程 虛擬主機 聯絡我們
程式設計的特性本質-靜態語言的優缺點

靜態語言的優點是可避免執行時期型態錯誤、提供重構輔助與更多的文件形式。

靜態語言明確要求程式中提供型態資訊,因而可透過編譯器或工具,在程式設計執行前(編譯時期)就檢查出型態錯誤。例如底下的Java範例:

void doQuack(Duck duck) { // 可傳入什麼?duck 可作什麼? }

在實作doQuack()方法時,若嘗試透過duck變數操作Duck沒有定義的方法或屬性,或者呼叫doQuack()方法時傳入非Duck物件,都會引發編譯錯誤。由於變數本身帶有型態資訊,可據此為基礎來設計相關重構時的輔助操作,例如提取方法(Extract method)時,根據提取的程式設計片段前後文資訊,在自動產生的方法中建立對應型態的參數與傳回型態。

型態資訊也可作為一種文件形式。以上例來說,在沒有揭露doQuack()方法的實作內容下,doQuack()使用者可從參數型態明確得知doQuack()方法接受Duck實例,doQuack()實作者亦可查閱Duck的API文件,可得知傳入物件的可操作方法或屬性,如果有個方法接受多個引數,從參數的型態也可得知呼叫方法時引數的傳入順序;另一種文件形式則可透過工具來達成,例如在編輯器中顯示Duck可用方法清單與相關文件檢索資訊。

靜態語言的缺點是程式語法繁瑣、彈性不足,只能檢查出執行時期前的簡單錯誤。

由於變數在宣告時必須指定型態資訊,使得程式碼撰寫起來特別囉嗦。有些靜態語言可使用類型推論來解決語法繁瑣問題,先前的Scala示範就是一例,然而開發者必須熟悉語言的類型推論框架,這又容易造成語法複雜或程式設計維護上的額外負擔。

靜態語言另一個問題就是較缺乏彈性。例如Java陣列元素必須是同種型態,若陣列中要放置異質元素,必須有類別繼承或介面實作的型態關係。例如:

Object[] person = {1, "programmer", new Date()};

這利用到Java中Object類別為所有物件父類別,以解決異質陣列問題,然而要操作特定型態時就得進行轉型,這又造成囉嗦的語法。例如:

Integer id = (Integer) person[0];

雖然靜態語言可於執行程式設計前檢查出型態錯誤,但沒有辦法檢查執行時期問題,單元測試依舊是必要的,這也是靜態語言反對者常持有的論調:「既然都要依賴更全面性的單元測試,為何要忍受靜態語言帶來的困擾?」

 


轉貼來源:IT專欄 - 林信良

 


參考文獻:

1.陳會安,2002,Java2 程式設計範例教本,台北:學貫行銷股份有限公司。

2.黃中杰,2002,JAVA 與XML 技術手冊,台北:碁峰資訊股份有限公司。

3.楊宗誌,2002,JBuildert 程式設計實務,台北:文魁資訊股份有限公司。

 
返回列表
上一頁 下一頁


相關文章

程式設計的特性本質-靜態語言與動態語言的信任抉擇
公司的網頁很慢,若想換別家的虛擬主機,要怎麼換?
一位DMOZ編輯人員對於提交網頁設計類的網站建議
關於虛擬主機與架站
網頁設計六種快速應變技巧


最新文章

HVACKer:入侵隔離網絡的新型攻擊技術
還有什麼不會被入侵?路由器 LED 燈已成為攻擊入口
美 5 家獨角獸同天申請 IPO 掛牌,最狂的是一家估值 124 億美的數據分析新創!
【台灣「智慧產業」開始佈局】緯創集團領投跨國 AI 新創 iKala,下一步拓展東南亞市場
快可以用手機遠端遙控你的所有家電了



 
PIECE2巨群 版權所有 © 2008 總公司:06-2895301 台北:02-82529838 台中:04-25152530 高雄:07-7931226
驗證 CSS 驗證 W3C
專精項目:網頁設計   網站設計   平面設計   包裝設計   關鍵字行銷   關鍵字排名   網路行銷   網站代管   虛擬主機   ERP系統