天天看點

動态語言和靜态語言 | 強類型語言和弱類型語言

1 動态語言和靜态語言

  通常我們所說的動态語言、靜态語言是指動态類型語言和靜态類型語言。

   1 動态類型語言:動态類型語言是指在運作期間才去做資料類型檢查的語言,也就是說,在用動态類型的語言程式設計時,永遠也不用給任何變量指定資料類型,該語言會在你第一次指派給變量時,在内部将資料類型記錄下來。Python和Ruby就是一種典型的動态類型語言,其他的各種腳本語言如VBScript也多少屬于動态類型語言。

   2 靜态類型語言:靜态類型語言與動态類型語言剛好相反,它的資料類型是在編譯其間檢查的,也就是說在寫程式時要聲明所有變量的資料類型,C/C++是靜态類型語言的典型代表,其他的靜态類型語言還有C#、JAVA等。

對于動态語言與靜态語言的區分,套用一句流行的話就是:Static typing when possible, dynamic typing when needed。

2 強類型定義語言和弱類型定義語言

  1 強類型定義語言:強制資料類型定義的語言。也就是說,一旦一個變量被指定了某個資料類型,如果不經過強制轉換,那麼它就永遠是這個資料類型了。舉個例子:如果你定義了一個整型變量a,那麼程式根本不可能将a當作字元串類型處理。強類型定義語言是類型安全的語言。

 2 弱類型定義語言:資料類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不同資料類型的值。

強類型定義語言在速度上可能略遜色于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動态語言”與“這門語言是否類型安全”之間是完全沒有聯系的!

    例如:Python是動态語言,是強類型定義語言(類型安全的語言); VBScript是動态語言,是弱類型定義語言(類型不安全的語言); JAVA是靜态語言,是強類型定義語言(類型安全的語言)。

強類型語言是指需要進行變量/對象類型聲明的語言,一般情況下需要編譯執行。例如C/C++/Java/C#

弱類型語言是指不需要進行變量/對象類型聲明的語言,一般情況下不需要編譯(但也有編譯型的)。例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等

總結 : python 動态語言,強類型語言

        shell  動态語言,弱類型語言

        C/C++  靜态語言,強類型語言

繼續閱讀