強弱型別(Strong and weak typing)表示在電腦科學以及程式設計中,經常把程式語言型別系統分為強型別(英語:strongly typed)和弱型別(英語:weakly typed (loosely typed))兩種。這兩個術語並沒有非常明確的定義,但主要用以描述程式語言對於混入不同資料型別的值進行運算時的處理方式。強型別的語言遇到函數引數型別和實際叫用型別不符合的情況經常會直接出錯或者編譯失敗;而弱型別的語言常常會實行隱式轉換,或者產生難以意料的結果。這對術語在短短的電腦歷史中,早已含括了更多的意義,而且時常很難知道寫的人究竟要表達哪個意思。

解釋

程式語言專家 Benjamin C. Pierce,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》的作者,曾說:

「我花了幾個星期…試着弄清楚「強型別」、「靜態型別」、「安全」等術語,但我發現這異常的困難…這些術語的用法不盡相同,所以也就近乎無用。」[1]

大致而言,「強型別」隱含着程式語言對容許混合情況出現加上了嚴格的限制,以避免程式碼以無效的資料使用方式編譯或執行。例如,整數除法運算不可用於字串;連結串列上的運算步驟不可用於數字。然而,這些限制的本質和效力是極易改變的。

強型別在文獻中的含義

已經被寫作者認定為「強型別」的一些要素包括:

  • 靜態型別不同於動態型別。在靜態型別系統中,型別是與變數相連繫的名稱(通常是在聲明時),而不是值(通常是在初始化時)。型別也可藉由編譯器來推斷。
  • 通過語言定義,對型別約束違規的編譯時間檢查的寄存要求。就是說,編譯器確保操作只發生在對這個運算有效的運算元上。
  • 型別安全;就是說,拒絕(在要麼編譯時間要麼執行時間)嘗試忽視資料型別的操作或函數呼叫。在更嚴格的設置下,通過證明進行性和藏存性來證明關於形式語言的型別安全
  • 禁止型別轉換。某個型別的值,不論是不是以顯式或隱式的方式,都不可轉換為另一個型別。
  • 但是某些作者,把「強型別語言」稱呼保留給省略隱式型別轉換(就是說編譯器為了利益編程者而插入的轉換)的語言。對於這些作者,程式語言是強型別的,如果型別必須通過通常叫做「強制」的顯式符號來轉換。
  • 無法規避型別系統。某些語言允許程式員取得值的表示法之下的東西(即位元模式),這有可能規避型別系統。
  • 有複合型別的複雜而細緻的型別系統。
  • 資料物件中固定且不變的型別。給定資料物件的型別在這個物件的生命期內不改變。例如,類別實例不可以改變它們的類。
  • 在執行程式之前,強型別就保證了執行時期的程式行為,其以靜態分析或其它的機制提供。

程式語言中的含義變異

參閱

參考文獻

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.