[筆記] 動態語言、靜態語言、強型別和弱型別

對我而言,這是個很容易忘記的其細節差異的問題,趁機來筆記一下。所謂動靜,在編譯時你就會知道。強弱的話,則是型別有無自動轉換。
code


內容

靜態語言

  • 當你在編譯期間,就需要提供其 type 資訊。例如 let a = “123” :: Int ,此時就會爆出錯誤,因為 “123” 字串並不屬於 Int (整數) 型別;或是你呼叫一個未經定義的 do() 函式,你也會在編譯期間就收到錯誤。
  • 又可細分為直接設定和推導決定,如:String item = “item” 和 var something = “item”。後者保有較佳的彈性

動態語言

靜態語言相對,型態本身並不需要事先指定


強型別語言

強型別會拒絕隱式的型別轉換,例如 var a = “1” + 2 就會爆出錯誤


弱型別語言

同樣以 var a = “1” + 2 為例,你會獲得 “12” 的結果


一覽表

還是用圖說比較好懂,一目了然。
notes-different-type-system-dynamic-static-strong-week


參考資料

1. 動態語言與靜態?直譯與編譯?強型別與弱型別?
2. 程式語言的特性本質(一)靜態語言與動態語言的信任抉擇
3. 弱类型、强类型、动态类型、静态类型语言的区别是什么?

按讚加入粉絲團

延伸閱讀