對我而言,這是個很容易忘記的其細節差異的問題,趁機來筆記一下。所謂動靜,在編譯時你就會知道。強弱的話,則是型別有無自動轉換。
內容
靜態語言
- 當你在編譯期間,就需要提供其 type 資訊。例如 let a = “123” :: Int ,此時就會爆出錯誤,因為 “123” 字串並不屬於 Int (整數) 型別;或是你呼叫一個未經定義的 do() 函式,你也會在編譯期間就收到錯誤。
- 又可細分為直接設定和推導決定,如:String item = “item” 和 var something = “item”。後者保有較佳的彈性
動態語言
和靜態語言相對,型態本身並不需要事先指定
強型別語言
強型別會拒絕隱式的型別轉換,例如 var a = “1” + 2 就會爆出錯誤
弱型別語言
同樣以 var a = “1” + 2 為例,你會獲得 “12” 的結果
一覽表
還是用圖說比較好懂,一目了然。
參考資料
1. 動態語言與靜態?直譯與編譯?強型別與弱型別?
2. 程式語言的特性本質(一)靜態語言與動態語言的信任抉擇
3. 弱类型、强类型、动态类型、静态类型语言的区别是什么?