App下載

編程語言的動(dòng)態(tài)靜態(tài)區(qū)分

steven 2021-10-20 14:06:54 瀏覽數(shù) (3542)
反饋

很多小伙伴在剛開始學(xué)習(xí)編程語言的時(shí)候會(huì)聽到一些很具有專業(yè)性的名詞(這里的專業(yè)性指新手聽不懂,大佬信手拈來的一些詞匯),其中有一些名詞具有一定的對(duì)立意義,今天小編要介紹的是動(dòng)態(tài)類型語言和靜態(tài)類型語言。

動(dòng)態(tài)類型&靜態(tài)類型

根據(jù)字面意思,動(dòng)態(tài)類型語言,也就是該語言的類型是動(dòng)態(tài)的,什么樣的類型是動(dòng)態(tài)的呢?很簡單,就是這個(gè)類型不需要聲明類型,一個(gè)類型究竟是什么類型只有在運(yùn)行的時(shí)候才知道。比如說python,PHP就是動(dòng)態(tài)類型語言,你會(huì)發(fā)現(xiàn)python和PHP中并沒有類型聲明這樣的東西,JavaScript也是如此。

在JavaScript中,聲明一個(gè)變量是這樣的:

var a;
a="W3cschool";

我們可以看到在剛開始聲明變量的時(shí)候,并沒有指定變量的類型(這里的var不是變量類型,只是一個(gè)聲明的關(guān)鍵字),在后續(xù)的引用中我們才確定了這個(gè)變量的類型(由代碼可知,這應(yīng)該是一個(gè)字符串)。

在python和PHP中,變量的聲明更加激進(jìn)(在python和PHP的變量聲明中甚至不需要var這樣的關(guān)鍵字)

python中:

 a ="W3Cschool"

PHP中:

$a ="W3Cschool";

動(dòng)態(tài)類型和靜態(tài)類型的區(qū)別不僅僅只在變量類型的聲明上,在函數(shù)聲明上也體現(xiàn)了這點(diǎn),以JavaScript為例,在定義函數(shù)的時(shí)候,我們不需要考慮返回值的類型,所以在聲明函數(shù)的時(shí)候使用簡單的function就足矣,也不需要聲明形參的類型,這樣的函數(shù)只有在數(shù)據(jù)傳進(jìn)去的時(shí)候才能知道具體的參數(shù)類型:

function add(a,b){
    return a+b;
}

接著,我們來看看靜態(tài)類型是怎么做的,以下是C語言的函數(shù)聲明和變量聲明:

int add(int a,int b){
    return a+b;
}
/*這是函數(shù)聲明*/
int main(){
    int a;  /*這是變量聲明*/
    a=10;
    return 0;
}

靜態(tài)類型的函數(shù)聲明與動(dòng)態(tài)類型的最大區(qū)別,就是函數(shù)、變量的聲明的時(shí)候充滿著聲明相關(guān)的關(guān)鍵字。

動(dòng)態(tài)類型和靜態(tài)類型各自的優(yōu)點(diǎn)可以前往百度搜索或者關(guān)注后續(xù)文章,簡單地說,動(dòng)態(tài)類型使用靈活,靜態(tài)類型因?yàn)榇_定了類型,對(duì)編譯器的要求會(huì)比較低(省去了確定變量類型的開銷)。而且靜態(tài)類型更易于代碼閱讀和理解。

 靜態(tài)類型易于代碼閱讀理解這點(diǎn),可以從python版本演變中看出端倪。在python3.6中引入對(duì)函數(shù)的參數(shù)和變量進(jìn)行類型注解的功能,算是解決了動(dòng)態(tài)類型語言帶來的弊端。

小結(jié)

在介紹完了動(dòng)態(tài)與靜態(tài)類型語言后,小伙伴們是否對(duì)一門語言是動(dòng)態(tài)語言的判斷有一定的了解呢?下圖是一個(gè)編程語言的動(dòng)態(tài)(靜態(tài))與強(qiáng)類型(弱類型)的一個(gè)象限劃分,上面列舉了一些常見的語言:


同時(shí)也預(yù)告下一篇文章的內(nèi)容:編程語言如何區(qū)分他是強(qiáng)類型的還是弱類型的?希望小伙伴們多多關(guān)注后續(xù)文章!

0 人點(diǎn)贊