強弱型別
此條目需要补充更多来源。 (2018年7月20日) |
類型系統 |
---|
一般概念 |
主要分类 |
次要分类 |
此條目可参照英語維基百科相應條目来扩充。 |
強弱型別(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]
大致而言,「強型別」隱含著程式語言對容許混合情況出現加上了嚴格的限制,以避免程式碼以無效的資料使用方式編譯或執行。例如,整數除法運算不可用於字串;鏈表上的運算步驟不可用於數字。然而,這些限制的本質和效力是極易改變的。
強型別在文獻中的含義
已经被写作者认定为“强型別”的一些要素包括:
- 靜態型別不同於動態型別。在靜態型別系統中,型別是與變數相連繫的名稱(通常是在声明時),而不是值(通常是在初始化時)。型別也可藉由編譯器來推斷。
- 通过语言定义,对型別约束违规的编译时间检查的托管要求。就是说,编译器确保操作只发生在对这个运算有效的操作数上。
- 型別安全;就是说,拒绝(在要么编译时间要么執行时间)尝试忽视資料型別的操作或函式呼叫。在更严格的设置下,通过证明进行性和藏存性来证明关于形式语言的型別安全。
- 禁止型別轉換。某個型別的值,不論是不是以顯式或隱式的方式,都不可轉換為另一個型別。
- 但是某些作者,把“强型別语言”称呼保留给省略隐式型別转换(就是说编译器为了利益编程者而插入的转换)的语言。对于这些作者,编程语言是强型別的,如果型別必须通过通常叫做“强制”的显式符号来转换。
- 無法規避型別系統。某些語言允許程式員取得值的表示法之下的東西(即位元模式),這有可能規避型別系統。
- 有复合型別的复杂而细致的型別系统。
- 資料物件中固定且不變的型別。给定資料物件的型別在这个物件的生命期内不改变。例如,类实例不可以改变它们的类。
- 在執行程式之前,強型別就保證了執行時期的程式行為,其以靜態分析或其它的機制提供。
程式語言中的含義變異
參閱
- 資料型別,更詳盡的型別問題
参考文献
- ^ 「強型別」指的是什麼. [2007-03-30]. (原始内容存档于2007-03-23).