很多小伙伴在剛開(kāi)始學(xué)習(xí)編程語(yǔ)言的時(shí)候會(huì)聽(tīng)到一些很具有專(zhuān)業(yè)性的名詞(這里的專(zhuān)業(yè)性指新手聽(tīng)不懂,大佬信手拈來(lái)的一些詞匯),其中有一些名詞具有一定的對(duì)立意義,今天小編要介紹的是動(dòng)態(tài)類(lèi)型語(yǔ)言和靜態(tài)類(lèi)型語(yǔ)言。
動(dòng)態(tài)類(lèi)型&靜態(tài)類(lèi)型
根據(jù)字面意思,動(dòng)態(tài)類(lèi)型語(yǔ)言,也就是該語(yǔ)言的類(lèi)型是動(dòng)態(tài)的,什么樣的類(lèi)型是動(dòng)態(tài)的呢?很簡(jiǎn)單,就是這個(gè)類(lèi)型不需要聲明類(lèi)型,一個(gè)類(lèi)型究竟是什么類(lèi)型只有在運(yùn)行的時(shí)候才知道。比如說(shuō)python,PHP就是動(dòng)態(tài)類(lèi)型語(yǔ)言,你會(huì)發(fā)現(xiàn)python和PHP中并沒(méi)有類(lèi)型聲明這樣的東西,JavaScript也是如此。
在JavaScript中,聲明一個(gè)變量是這樣的:
var a;
a="W3cschool";
我們可以看到在剛開(kāi)始聲明變量的時(shí)候,并沒(méi)有指定變量的類(lèi)型(這里的var不是變量類(lèi)型,只是一個(gè)聲明的關(guān)鍵字),在后續(xù)的引用中我們才確定了這個(gè)變量的類(lèi)型(由代碼可知,這應(yīng)該是一個(gè)字符串)。
在python和PHP中,變量的聲明更加激進(jìn)(在python和PHP的變量聲明中甚至不需要var這樣的關(guān)鍵字)
python中:
a ="W3Cschool"
PHP中:
$a ="W3Cschool";
動(dòng)態(tài)類(lèi)型和靜態(tài)類(lèi)型的區(qū)別不僅僅只在變量類(lèi)型的聲明上,在函數(shù)聲明上也體現(xiàn)了這點(diǎn),以JavaScript為例,在定義函數(shù)的時(shí)候,我們不需要考慮返回值的類(lèi)型,所以在聲明函數(shù)的時(shí)候使用簡(jiǎn)單的function就足矣,也不需要聲明形參的類(lèi)型,這樣的函數(shù)只有在數(shù)據(jù)傳進(jìn)去的時(shí)候才能知道具體的參數(shù)類(lèi)型:
function add(a,b){
return a+b;
}
接著,我們來(lái)看看靜態(tài)類(lèi)型是怎么做的,以下是C語(yǔ)言的函數(shù)聲明和變量聲明:
int add(int a,int b){
return a+b;
}
/*這是函數(shù)聲明*/
int main(){
int a; /*這是變量聲明*/
a=10;
return 0;
}
靜態(tài)類(lèi)型的函數(shù)聲明與動(dòng)態(tài)類(lèi)型的最大區(qū)別,就是函數(shù)、變量的聲明的時(shí)候充滿(mǎn)著聲明相關(guān)的關(guān)鍵字。
動(dòng)態(tài)類(lèi)型和靜態(tài)類(lèi)型各自的優(yōu)點(diǎn)可以前往百度搜索或者關(guān)注后續(xù)文章,簡(jiǎn)單地說(shuō),動(dòng)態(tài)類(lèi)型使用靈活,靜態(tài)類(lèi)型因?yàn)榇_定了類(lèi)型,對(duì)編譯器的要求會(huì)比較低(省去了確定變量類(lèi)型的開(kāi)銷(xiāo))。而且靜態(tài)類(lèi)型更易于代碼閱讀和理解。
靜態(tài)類(lèi)型易于代碼閱讀理解這點(diǎn),可以從python版本演變中看出端倪。在python3.6中引入對(duì)函數(shù)的參數(shù)和變量進(jìn)行類(lèi)型注解的功能,算是解決了動(dòng)態(tài)類(lèi)型語(yǔ)言帶來(lái)的弊端。
小結(jié)
在介紹完了動(dòng)態(tài)與靜態(tài)類(lèi)型語(yǔ)言后,小伙伴們是否對(duì)一門(mén)語(yǔ)言是動(dòng)態(tài)語(yǔ)言的判斷有一定的了解呢?下圖是一個(gè)編程語(yǔ)言的動(dòng)態(tài)(靜態(tài))與強(qiáng)類(lèi)型(弱類(lèi)型)的一個(gè)象限劃分,上面列舉了一些常見(jiàn)的語(yǔ)言:
同時(shí)也預(yù)告下一篇文章的內(nèi)容:編程語(yǔ)言如何區(qū)分他是強(qiáng)類(lèi)型的還是弱類(lèi)型的?希望小伙伴們多多關(guān)注后續(xù)文章!