簡介
強弱類型(Strong and weak typing)表示在計算機科學以及程式設計中,經常把程式語言的類型系統分為 強類型(英語:strongly typed)和 弱類型(英語:weakly typed (loosely typed))兩種。這兩個術語並沒有非常明確的定義,但主要用以描述程式語言對於混入不同數據類型的值進行運算時的處理方式。強類型的語言遇到函式引數類型和實際調用類型不匹配的情況經常會直接出錯或者編譯失敗;而弱類型的語言常常會實行隱式轉換,或者產生難以意料的結果。這對術語在短短的計算機歷史中,早已含括了更多的意義,而且時常很難知道寫的人究竟要表達哪個意思。
解釋
程式語言專家Benjamin C. Pierce,《Types and Programming Languages》和《Advanced Topics in Types and Programming Languages》的作者,曾說:
“我花了幾個星期…試著弄清楚“強類型”、“靜態類型”、“安全”等術語,但我發現這異常的困難…這些術語的用法不盡相同,所以也就近乎無用。”
大致而言,“強類型”隱含著程式語言對容許混合情況出現加上了嚴格的限制,以避免代碼以無效的數據使用方式編譯或運行。例如,整數除法運算不可用於字元串;鍊表上的運算步驟不可用於數字。然而,這些限制的本質和效力是極易改變的。
強類型在文獻中的含義
已經被寫作者認定為“強類型”的一些要素包括:
•靜態類型不同於動態類型。在靜態類型系統中,類型是與變數相連繫的名稱(通常是在聲明時),而不是值(通常是在初始化時)。類型也可藉由編譯器來推斷。
•通過語言定義,對類型約束違規的編譯時間檢查的託管要求。就是說,編譯器確保操作只發生在對這個運算有效的運算元上。
•類型安全;就是說,拒絕(在要么編譯時間要么運行時間)嘗試忽視數據類型的操作或函式調用。在更嚴格的設定下,通過證明進行性和藏存性來證明關於形式語言的類型安全。
•禁止類型轉換。某個類型的值,不論是不是以顯式或隱式的方式,都不可轉換為另一個類型。
•但是某些作者,把“強類型語言”稱呼保留給省略隱式類型轉換(就是說編譯器為了利益編程者而插入的轉換)的語言。對於這些作者,程式語言是強類型的,如果類型必須通過通常叫做“強制”的顯式符號來轉換。
•無法規避類型系統。某些語言允許程式設計師獲取值的表示法之下的東西(即比特模式),這有可能規避類型系統。
•有複合類型的複雜而細緻的類型系統。
•數據對象中固定且不變的類型。給定數據對象的類型在這個對象的生命期內不改變。例如,類實例不可以改變它們的類。
•在運行程式之前,強類型就保證了運行時期的程式行為,其以靜態分析或其它的機制提供。
參閱
•數據類型,更詳盡的類型問題