我是一個漂亮的初級開發人員(第一年CS學生),我一直在學習靜態類型語言和動態類型語言之間的差異。糾正我,如果我錯了,但我的理解是,動態類型語言允許程序員初始化變量而不給它一個類型,然後在程序中稍後給這個變量類型。只是爲了好奇,是否有任何語言允許您在不初始化全新變量的情況下更改對象的類型/類別?是否有一種語言可以改變變量類型?
回答
我認爲你要找的是weak typing。請注意,弱打字與強打字不同於靜態打字與動態打字。
這一切都取決於你所說的一個全新的變量。例如,在PHP中:
<?php
$var = NULL; // $var is now of type null
$var = 1; // $var is now of type integer
?>
等等。但是,不能保證先前用於存儲NULL值的空間現在用於存儲1,因此您可以說您只是爲自己創建了一個具有相同名稱的全新變量。
它取決於你如何定義類型,但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
There ar e靜態/動態類型和強/弱類型的定義很多,所以很難具體回答任何一般性問題。這就是說,我使用的(非常高的)定義傾向於相當好地傳達總體思路(至少,我認爲是這樣)。
靜態類型vs動態類型
靜態類型語言適用類型變量。變量count
可以被定義爲一個整數。它只能保存整數值。
動態類型語言將值的類型應用於值,但不包含變量。值123是一個整數,「abc」是一個字符串,但變量result
可以在不同的時間點分配給一個或兩個。
強VS弱類型
在一個強類型語言,一個值都有一個類型,它是唯一的那種類型。例如,"123"
是一個字符串,其中123
是一個整數。您不能將字符串視爲整數,反之亦然。你可以在它們之間進行轉換(即「123」.toint()等),但是你不能只把一種類型看作另一種類型(即。以下將無效:「123」+ 456 == 579)
在弱類型語言中,值只是一個值,您可以根據它的用途將其視爲各種類型。例如,你可以說"123" + 234
並得到一個有用的結果(357或123234取決於語言)。
在靜態和動態之間,以及強弱之間存在很多灰色區域,但上面的定義給出了一個總體思路。
關於相關話題,還有顯式和隱式類型(程序員指定類型和編譯器數字類型),這是一個非常有趣的話題。
- 1. 使用一個隱含類型種姓是否改變變量的類型?
- 2. 有沒有辦法改變這種語言的變量值?
- 3. 是否有一個變量可以存儲相同類型的其他變量?
- 4. 變量類型本身是變量的語言?
- 5. 類變量是否可變?
- 6. 是否可以在運行時更改AngularJS變量的類型?
- 7. 是否可以在html中檢索語言標記變量?
- 8. 是否可以對一個const變量進行類型轉換?
- 9. 是否可以修改$ _SESSION變量?
- 10. PowerShell是一種強類型語言嗎?
- 11. 環境變量語言是否具體?
- 12. 使用會話變量處理2種語言可以嗎?
- 13. 超類型變量是否可以引用子類對象?
- 14. 將類型賦值給變量 - 'A'是一種類型,但用作'變量'?
- 15. 狀態monad是否需要/有用可變(本地)變量(如Scala)的語言?
- 16. 是否有一個Eclipse插件可以執行從一種語言到另一種語言的評論翻譯?
- 17. 改變語言
- 18. 是否可以創建採用任何類型變量的堆棧類?不僅有1種類型
- 19. 哪些類型在Google Go語言中可變且不可變?
- 20. 是否有一種語言具有這種簡化的語法?
- 21. LESS變量:是有這種類型可能
- 22. 哪種語言可以在運行時動態改變類成員?
- 23. 是否可以使用類型變量來轉換對象的變量?
- 24. 是否有可能在變量中更改變量的值?
- 25. C語言中的可變修改類型
- 26. 是否有用於檢查變量類型的快捷語法?
- 27. 以動態類型語言(如Ruby)命名變量
- 28. 混淆是否會改變變量/函數類型
- 29. 什麼語言可以連續改變程序音量?
- 30. 是否可以將一種語言的unicode轉換爲其他語言的unicode?