如果每個變數型別在編譯時期就完全決定好,稱這個型別屬於static type。這類的型別在使用變數時通常都需要先宣告變數,編譯器會在編譯時期去做type checking。比如說Java, C, C++, C#。以下是一段C的範例:
int num, sum;
num = 5;
sum = 10;
sum = sum + num;
變數使用前需要宣告是static type的特徵之一
Dynamic Typing
Dynamic type和static type相反,一個屬於dynamic type的型別不需要宣告變數,因此編譯器無法對型別做檢查在編譯時找出型別上的錯誤。在執行期間存取變數時,會透過適當的機制來判斷此變數可能的型別。Dynamic type不需要事先宣告變數就能直接使用,比如說Python, PHP, Ruby, Perl。以下是一段Python的範例程式:
sum = 1;
sum += 2;
上面的範例直接使用變數sum而沒有事先宣告,這是dynamic type的其中一個特徵。 簡單來說,Static typing會在編譯時去做type checking。而dynamic type會在run-time時做check。
Strong Typing
Strong typing是指變數會被綁定到某個型別,除非經過明顯的型別轉換,不然型別不會任意改變。比如說Python就是strong typing,以下是個範例:
>>> x = 3
>>> y = '4'
>>> print(x+y)
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Python不允許int和string相加,除非主動去做型別轉換,不然x和y變數不會經過隱藏的型別轉換加在一起。這就是Strong typing的主要特徵。Python是dynamic typing同時也是strong typing
Weak Typing
Weak typing是指型別的概念比較弱,變數的型別可能隨時會經過隱性的轉換。比如說JavaScript,以下是JavaScript的範例:
var x = 3
var y = '4'
alert(x + y) //Produces "34"
不同於Python,JavaScript允許這種語法並且會自動幫你做型別轉換。這就是weak typing的特徵之一。
-雲遊山水為知已逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言