2011-12-05 124 views
2

我是一個漂亮的初級開發人員(第一年CS學生),我一直在學習靜態類型語言和動態類型語言之間的差異。糾正我,如果我錯了,但我的理解是,動態類型語言允許程序員初始化變量而不給它一個類型,然後在程序中稍後給這個變量類型。只是爲了好奇,是否有任何語言允許您在不初始化全新變量的情況下更改對象的類型/類別?是否有一種語言可以改變變量類型?

回答

1

我認爲你要找的是weak typing。請注意,弱打字與強打字不同於靜態打字與動態打字。

0

這一切都取決於你所說的一個全新的變量。例如,在PHP中:

<?php 
$var = NULL; // $var is now of type null 
$var = 1; // $var is now of type integer 
?> 

等等。但是,不能保證先前用於存儲NULL值的空間現在用於存儲1,因此您可以說您只是爲自己創建了一個具有相同名稱的全新變量。

0

它取決於你如何定義類型,但JavasScript沒有「類」,並允許你輕鬆地將接口改變爲對象。

我不知道有一個強大的面向對象的基礎上,允許你這樣做的任何一種語言:

typeof dog // Dog 
dog.turnIntoCat() 
typeof dog // Cat 

但是幾乎所有的OO語言都支持類似:

typeof dog // Dog 
cat = dog.turnIntoCat() 
typeof cat // Cat 

我認爲所有動態類型的語言(至少我所知道的所有)允許這樣:

typeof dog // Dog 
dog = new Cat() 
typeof dog // Cat 
0

There ar e靜態/動態類型和強/弱類型的定義很多,所以很難具體回答任何一般性問題。這就是說,我使用的(非常高的)定義傾向於相當好地傳達總體思路(至少,我認爲是這樣)。

靜態類型vs動態類型

靜態類型語言適用類型變量。變量count可以被定義爲一個整數。它只能保存整數值。

動態類型語言將值的類型應用於值,但不包含變量。值123是一個整數,「abc」是一個字符串,但變量result可以在不同的時間點分配給一個或兩個。

強VS弱類型

在一個強類型語言,一個值都有一個類型,它是唯一的那種類型。例如,"123"是一個字符串,其中123是一個整數。您不能將字符串視爲整數,反之亦然。你可以在它們之間進行轉換(即「123」.toint()等),但是你不能只把一種類型看作另一種類型(即。以下將無效:「123」+ 456 == 579)

在弱類型語言中,值只是一個值,您可以根據它的用途將其視爲各種類型。例如,你可以說"123" + 234並得到一個有用的結果(357或123234取決於語言)。

在靜態和動態之間,以及強弱之間存在很多灰色區域,但上面的定義給出了一個總體思路。

關於相關話題,還有顯式和隱式類型(程序員指定類型和編譯器數字類型),這是一個非常有趣的話題。

相關問題