swift不用声明类型那些事
2019獨角獸企業重金招聘Python工程師標準>>>
這事本來如果王垠在專家角度來說會比較好看一點。不過e神既然提到了swift的這個特性和PHP等動態語言進行類比,那就隨便說一下。畢竟@我兩次了,但是我覺得篇幅太長一直沒回。
首先,我對swift的信息來源,并非來自于實踐,官方文檔好像要注冊apple帳號啥的才能下,隨便找到了這篇文檔,就以此為準進行說明。
然后,要把論點具體化,我不想爭論靜態類型語言好還是動態類型語言好,這樣話題范圍太廣。只是想說明下swfit的【不用在定義變量的時候聲明類型】,和php等動態語言,具體有什么不同。
swfit(以及c#)和java比,有一個地方讓人眼前一亮,就是可以在定義變量的時候不需要聲明類型
var a = "asdf" // 因為"asdf"是String類型,所以a是String類型,沒錯,就這么智能 var b : String // 也支持像Java一樣定義變量的時候,先不關聯值,只是指定類型 b = a print(b)除此之外呢,swift和java在變量類型上的表現是差不多的,比如變量不能在它的作用域內變更類型
var a = "asdf" a = 1 // 編譯時就報錯歸根結底,swift和java等靜態類型語言有相同的一個特性:大部分變量數據類型都能在編譯時確定。
對比一:
func a (b: String) -> String {var c = "Hello World " + breturn c }在這里,我們可以第一眼看過去的時候,就知道參數b的類型是String。 那么PHP呢?
function a($b) {$c = "hello World $b";return c; }這里光看函數定義,$b是什么我們是不知道的。
對比二:
func a (b: String) -> String {var c = "Hello World "if b == "a" {c = c + b} else {c = b + c}return c }在swift里,c的類型固定是String,那在php里呢?
function a($b) {$c = "hello World";if ($b == "a") {$c = "hello World $b";} else {$c = strlen($b);}return c; }在PHP里,不僅變量不需要指定類型,變量本身的類型大部分情況下不到真正拿具體數據跑起來是不清楚的。
對比三:
這里就懶得直接寫代碼了,就拿class(或者你喜歡array也行)來說,里面的大量的變量數據類型,在swift里是基本穩定的,但是在PHP的語法層面是不確定的。(語法層面不確定,就代表編譯器一開始是不確定數據類型的,編譯器如果要進行JIT性能優化,第一步先要猜測類型)
結論:
swift(以及c#)相比于java等,同樣都是靜態類型的語言,它所謂的不用聲明類型只是在定義變量的時候,語法規定可以直接從它的初始值推倒出它的類型,避免編碼上的啰嗦。
只是語法上的一個特性而已,它是靜態類型的本質是不變的。和PHP等動態類型語言,完全不是一回事。
轉載于:https://my.oschina.net/visualgui823/blog/829824
總結
以上是生活随笔為你收集整理的swift不用声明类型那些事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓开发学习笔记
- 下一篇: 3.JAVA基础复习——JAVA中的类与