1) 靜態(tài)類(lèi)型語(yǔ)言
靜態(tài)類(lèi)型指的是在創(chuàng )建份數據(變量、參數、返回值等)時(shí)需要顯式指明該數據的類(lèi)型。通常情況下,這些數據的類(lèi)型旦被定義,在程序的整個(gè)生命周期也不再改變。
2) 動(dòng)態(tài)類(lèi)型語(yǔ)言
動(dòng)態(tài)類(lèi)型的編程語(yǔ)言在創(chuàng )建數據時(shí)往往不需要指明該數據的類(lèi)型,而且數據的類(lèi)型也會(huì )隨著(zhù)值的改變而改變,給數據賦予不同的值,數據將得到不同的類(lèi)型。
對于靜態(tài)類(lèi)型語(yǔ)言,我們需要預明確地告訴編譯器要處理的數據的類(lèi)型,這樣在程序部署之前就能發(fā)現代碼中的錯誤或者疏忽。比如我們將個(gè)變量定義為整數,將另個(gè)變量定義為字符串,如果我們嘗試將兩個(gè)變量相加,那么編譯器在編譯期間可能就會(huì )捕獲這種語(yǔ)法錯誤,并且不會(huì )讓我們完成程序的構建。
3)強類(lèi)型語(yǔ)言
強類(lèi)型語(yǔ)言的典型特征,它們不會(huì )處理與類(lèi)型定義明顯矛盾的運算,而是把它標記為個(gè)問(wèn)題,并作為錯誤拋出。通常人們認為 C/C++、Java、C#、Python、Go 都是強類(lèi)型語(yǔ)言,它們都不允許上述代碼中的行為。
4)弱類(lèi)型語(yǔ)言
和強類(lèi)型語(yǔ)言不樣,當我們執行些與類(lèi)型定義不匹配的運算時(shí),弱類(lèi)型語(yǔ)言嘗試提供幫助,它可能會(huì )臨時(shí)轉換值的類(lèi)型,讓它當前運算。
正如前面提到的,人們經(jīng)?;煜o態(tài)/動(dòng)態(tài)類(lèi)型和強/弱類(lèi)型的概念,傾向于將靜態(tài)類(lèi)型等同于強類(lèi)型,將動(dòng)態(tài)類(lèi)型等同于弱類(lèi)型,實(shí)際上這是不對的。
強/弱類(lèi)型指的是編程語(yǔ)言如何處理運算過(guò)程中的值。當值的類(lèi)型不運算規則時(shí),編程語(yǔ)言究竟是做出些猜測,臨時(shí)轉換值的類(lèi)型以幫助人們解決問(wèn)題,還是停止運行,提醒人們不應該這樣做?