1) 靜態(tài)類型語言
靜態(tài)類型指的是在創(chuàng)建份數(shù)據(jù)(變量、參數(shù)、返回值等)時(shí)需要顯式指明該數(shù)據(jù)的類型。通常情況下,這些數(shù)據(jù)的類型旦被定義,在程序的整個(gè)生命周期也不再改變。
2) 動(dòng)態(tài)類型語言
動(dòng)態(tài)類型的編程語言在創(chuàng)建數(shù)據(jù)時(shí)往往不需要指明該數(shù)據(jù)的類型,而且數(shù)據(jù)的類型也會(huì)隨著值的改變而改變,給數(shù)據(jù)賦予不同的值,數(shù)據(jù)將得到不同的類型。
對(duì)于靜態(tài)類型語言,我們需要預(yù)明確地告訴編譯器要處理的數(shù)據(jù)的類型,這樣在程序部署之前就能發(fā)現(xiàn)代碼中的錯(cuò)誤或者疏忽。比如我們將個(gè)變量定義為整數(shù),將另個(gè)變量定義為字符串,如果我們嘗試將兩個(gè)變量相加,那么編譯器在編譯期間可能就會(huì)捕獲這種語法錯(cuò)誤,并且不會(huì)讓我們完成程序的構(gòu)建。


3)強(qiáng)類型語言
強(qiáng)類型語言的典型特征,它們不會(huì)處理與類型定義明顯矛盾的運(yùn)算,而是把它標(biāo)記為個(gè)問題,并作為錯(cuò)誤拋出。通常人們認(rèn)為 C/C++、Java、C#、Python、Go 都是強(qiáng)類型語言,它們都不允許上述代碼中的行為。
4)弱類型語言
和強(qiáng)類型語言不樣,當(dāng)我們執(zhí)行些與類型定義不匹配的運(yùn)算時(shí),弱類型語言嘗試提供幫助,它可能會(huì)臨時(shí)轉(zhuǎn)換值的類型,讓它當(dāng)前運(yùn)算。
正如前面提到的,人們經(jīng)?;煜o態(tài)/動(dòng)態(tài)類型和強(qiáng)/弱類型的概念,傾向于將靜態(tài)類型等同于強(qiáng)類型,將動(dòng)態(tài)類型等同于弱類型,實(shí)際上這是不對(duì)的。
強(qiáng)/弱類型指的是編程語言如何處理運(yùn)算過程中的值。當(dāng)值的類型不運(yùn)算規(guī)則時(shí),編程語言究竟是做出些猜測,臨時(shí)轉(zhuǎn)換值的類型以幫助人們解決問題,還是停止運(yùn)行,提醒人們不應(yīng)該這樣做?