說(shuō)明
在學(xué)術(shù)上眶根,以上的概念有更加細(xì)致的定義。我是為了便于自己理解才把這些概念簡(jiǎn)化成這樣边琉。
動(dòng)態(tài)属百,靜態(tài)
強(qiáng)類(lèi)型,弱類(lèi)型
這些都不是絕對(duì)的定義变姨,是有程度的族扰。
比如絕對(duì)的強(qiáng)類(lèi)型是100分,絕對(duì)的弱類(lèi)型是0分。一般語(yǔ)言是介于這兩者之間的渔呵。
比如 c 語(yǔ)言怒竿,是一門(mén)靜態(tài)語(yǔ)言,具有動(dòng)態(tài)特性扩氢。
在編譯時(shí)耕驰,需要確定變量類(lèi)型(靜態(tài)語(yǔ)言的表現(xiàn))
但是其具有 void* 類(lèi)型。這個(gè)指針的類(lèi)型是在運(yùn)行時(shí)才能確定的(動(dòng)態(tài)特性的表現(xiàn))
弱類(lèi)型語(yǔ)言也可能具有動(dòng)態(tài)特性
對(duì)強(qiáng)弱類(lèi)型的一些理解
這個(gè)概念我一直理解不好
現(xiàn)在主要通過(guò)是否存在編程語(yǔ)言層面的隱式類(lèi)型轉(zhuǎn)換來(lái)進(jìn)行區(qū)分
a = 5
b = '5'
sumA = a + b
sumB = a - b
以上內(nèi)容在 c 語(yǔ)言中
a + b, a - b 的表達(dá)式录豺,c 語(yǔ)言都會(huì)在環(huán)境中將 b(字符類(lèi)型) 轉(zhuǎn)換為 (整型) 然后進(jìn)行運(yùn)算
而這個(gè)轉(zhuǎn)化過(guò)程是自動(dòng)的朦肘,不受控制的,語(yǔ)言完成的
可以視為隱式轉(zhuǎn)換
可以說(shuō) c 語(yǔ)言是弱類(lèi)型的
c語(yǔ)言在表達(dá)式的計(jì)算過(guò)程中双饥,具有將一個(gè)變量的值的類(lèi)型進(jìn)行改變的能力媒抠,可以說(shuō)他是弱類(lèi)型的
以上內(nèi)容在 Python 中
會(huì)直接報(bào)錯(cuò)的,提示無(wú)法直接運(yùn)算
在 Python 中咏花,可以 overload 操作符趴生, + 的本質(zhì)是調(diào)用 實(shí)例的
add 函數(shù),是可以對(duì) + 進(jìn)行處理的昏翰〔源遥可以自定義 + 的運(yùn)算規(guī)則
重寫(xiě) add 函數(shù)痛黎,就可以對(duì)不同的類(lèi)型做處理,語(yǔ)言并沒(méi)有對(duì)數(shù)據(jù)類(lèi)型做隱式轉(zhuǎn)換
Python 語(yǔ)言并沒(méi)有將變量自動(dòng)改變類(lèi)型的特性(不具有隱式轉(zhuǎn)換)声邦,說(shuō)他是強(qiáng)類(lèi)型的
強(qiáng)弱類(lèi)型的優(yōu)缺點(diǎn)
- 強(qiáng)類(lèi)型安全性更高些
- 弱類(lèi)型速度更快些
泛型特性與強(qiáng)類(lèi)型特性的不同
從動(dòng)態(tài)婉支、靜態(tài)的角度看:
Python 是動(dòng)態(tài)語(yǔ)言
c, Objective-C 具有動(dòng)態(tài)特性 (void* , id)
這屬于動(dòng)態(tài)這個(gè)概念的內(nèi)容
也是這些語(yǔ)言的共性
從泛型的角度看
這些也都是泛型的特性
泛型是一種對(duì)類(lèi)型系統(tǒng)分類(lèi)副作用的解決方案
(比如在 c 中,你要交換兩個(gè)變量的值距芬,寫(xiě)了一個(gè)交換的方法。由于c 是顯式聲明類(lèi)型的,所以針對(duì)不同類(lèi)型球订,要寫(xiě)多個(gè)方法。用了泛型之后就只需要寫(xiě)一個(gè)方法就可以了瑰钮∶疤玻可以直接交換 兩個(gè) void* 的值±饲矗可以寫(xiě)一份代碼开睡,給多種類(lèi)型使用)
從強(qiáng)弱類(lèi)型來(lái)看
Python 中的變量可以隨意的改變其引用指向的類(lèi)型
a = 5
a = '你好'
(這是有程序顯式改變的)python 本身并沒(méi)有對(duì)變量 a 的類(lèi)型做任何的改變,即Python 不具有隱式改變變量的能力苟耻,所以說(shuō)他是強(qiáng)類(lèi)型的
這種顯式改變不能說(shuō)明 Python 是弱類(lèi)型的
c, Objective-C 中使用void* , id 也可以改變指針的指向類(lèi)型
這種改變也是程序控制的篇恒,不是語(yǔ)言自動(dòng)做的。這都是屬于顯式的改變變量的類(lèi)型
這種顯式改變也不是弱類(lèi)型的特點(diǎn)