幼談蘋果新開發語言:Swift和蘋果的用心

羅小胖發表於2014-06-04

今天是個值得紀念的日子:因為蘋果的WWDC大會。蘋果的每次WWDC(全球開發者大會)舉行都讓我們像打了腎上腺素這麼興奮、幸福、驚歎、震撼、深思。

今年也不例外,最關鍵的是蘋果帶來了它的一門新開發語言:Swift.

霎時間風起雲湧,短短几個小時網際網路界掀起了一股談論Swift的小高潮,如果你不知道Swift,你會覺得這是一件很丟臉的事情,粑粑。

為了不至於太落後受鄙視,我今天也來簡單談談Swift(不知道為何,國內把它稱為雨燕。別這樣好嗎?這讓我想起了 長安鈴木的Swift 雨燕汽車)


一、全新Swift程式語言改變了Objective-C複雜的語法,並保留了Smalltalk的動態特性

這是目前大家公認的對Swift的評價。這裡我們來解讀一下:

Objective-

C:擴充C的物件導向程式語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的系統,是NeXTSTEP和OpenStep的基本語言。(百度百科上抄的),簡單一句話就

是:objc主要是開發ios應用的(尤其iphone),因為iphone4火了,所以objective-c也火了。如果硬要說objective-c有多優秀,那倒也不至於,當時nextstep選用它開發,就是因為這貨用起來比較方便。

不過尤其是objc的初學者,你會發現,這廝剛開始開發不習慣時是在太繁瑣了。至少我剛開始接觸xcode程式設計時對objc語法極端的不適應。如果不是xcode編輯器足夠的智慧,否則讓我用記事本寫objc程式碼一定連翔都寫不出。譬如我們來看段程式碼:

myclass *mm=[[myclass alloc] init:[NSString stringByFormat:"%@",@"shenyi"]]; //手敲的,估計有錯,懶得檢查,沒興趣。

如果換成java其實就是:

myclass mm=new myclass("shenyi"); //就是這麼清新爽潔,不緊繃。

Smalltalk:大叔級程式設計師一定有所耳聞,它被稱為“物件導向程式設計之母”,主要被廣泛應用於上個世紀80年代,它的出現推動了Objective-C,Actor, Java 和Ruby這些高大上語言的產生。

我們來簡單看一下Smalltalk的語法:

1、賦值。 := ,要讓變數a=1,則需要a:=1

2、比較。= 譬如來判斷變數a是否等於變數b ,這種比較用於內容比較,非指標,

3、深比較a==b . 這是用來比較指標的,很純粹的比較。

物件定義:

在java中也許我們得,int a;String b;float c;

但是在Smalltalk中,只需|a b c|

,既完成了三個物件的定義,因為Smalltalk也是“接受任意型別的物件”的。後面我們就能理解,為何Swift也是這種貨色,只不過赤裸裸的|a b

c |確實不太容易閱讀,因此,加了一個var 的關鍵字。譬如var a=1; 諸如此類

呼叫函式:

其實最令我吃驚的是Smalltalk的表示式。

譬如在java中我們要寫下面的程式碼:

 假設有個類叫做myclass,裡面有個方法是 showName,傳入一個字串,然後赤裸裸的返回。

在java中呼叫:myclass _mm=new myclass();String a="沈逸"; String b=_mm.showName(a);

大家肯定看得懂,然後我們來看Smalltalk的寫法

|a b|.

a:="沈逸".

mm:=myclass new.

b:=mm showName:a.

好吧,大家會發現,smalltalk連"."、","都木有。大家仔細體會一下吧,有利於後面我們來理解Swift為何是objc和smalltalk的優生優育品種。


啥叫動態特性?

這句話的第三個知識點是”動態特性“。

所謂的動態特性是指:在執行時才進行關係確定的特性。 也就是說譬如Smalltalk,假設有個變數,這個變數是在執行時才進行它的型別檢測和關係繫結的。

所以Smalltalk並不需要事先申明變數的型別,執行時進行系統自動檢測。


二、關於Swift語言

看這節前,我們內心先默唸objective-c和smalltalk,接下來你就不難理解這貨為何會這樣了。

變數:

var a=1    大家可以看到,smalltalk的動態特性出現咧~~~~

還可以強迫指定型別: var a:Int=1   我們來想一下smalltalk 是這樣寫的吧

|a|

a:=1(???var a:(Int)=1)


陣列和物件:

如果你會javascript,那麼恭喜你,你已經會Swift的陣列和物件了。看程式碼:

var mylist=["I","love","you"]; //陣列

物件:

var mylist=[

"name":"shenyi",

"sex":"男"

]

迴圈:

var b=0;

var a= 0

    for i in 0..10 {  

        b+= i  

    }  

這是一目瞭然的簡單。 注意這裡有一種".." 還有一個是"...", 前者所謂的是前閉後開,後者是前開後閉。啥意思?很簡單嘛

var a= 0

    for i in 0..10 {  

        b+= i  

    }等同於

var a= 0

    for var i=0;i<10;++i{

        b+= i  

    }

函式:

func showname(name: String, age: Int)-> String {

       return "我的名字是 \(name), 年齡 是 \(age)."

}

函式定義等同於java中的:

String showname(String name,int age)

同時,你還可以通過元組返回多個值

func  getusersage(Int,Int,Int){

return (20,23,25)

}

啥叫元組?(可不是元祖蛋糕哦~~)我舉個例子:

var dept1=['小張','小明']; 代表部門1 中有小張和小明兩個同事。

var dept2=['小紅',dept1] ;代表部門2是一個大部門,包含了小紅以及部門1的所有同事,共三個人。

其實 detp1[1]的值是小明。 同理:dept2[1][1]的值 還是小明


好了,這裡只做個大概介紹,本文並不是教程,錯誤之處難免。同時有幾個小建議:

1、大家如果真要學Swift,那麼請在mac上自行搭建環境邊測試邊學,網上目前很早就放出來的幾個Swift目測都有筆誤和講的混淆的地方(我的也一樣),學程式設計最主要的還是要”自己動手,豐衣足食“,看教程看的大概即可。

2、swift剛出來,大家千萬不要認為objective-c一點不會直接進入swift就可以開發APP了。目測,這和vc和vc.net出來後一樣的道理,你如果完全不會vc,那麼vc++也不一定會。

3、Swift和objc的互動到底到達什麼程度,我還沒試用過,100%相容我個人認為目前是不可能的。

4、當年c#剛出生(2000年),也是通過了多個版本後開始逐步強大和成熟。Swift不可能因為是蘋果的就不需要走這條”曲折的道路“。

5、objc確實有點繁瑣,但是不像網上某些教程說的”極為繁瑣”,要說替代還為之過早。

6、如果要說Swift的目的,我個人認為肯定不是蘋果為了“減輕開發者負擔,降低學習門檻”而設定的,如果要說效能,也許Swift要更勝一籌,但絕對不是

微博上某些“objc噴子”說的比objc高N個檔次,個人更認為Swift可能是蘋果進軍 1)跨平臺 2)穿戴智慧裝置 3)智慧家居等  

幾個方面或某個方面用的。

正因為objc的一些特性,讓很多android開發者不願意轉換到哪怕腳踏兩隻船到ios陣營中(這只是其中一個因素),如果出現了一個swift,也許就不一樣了。(僅僅是也許)

7、當然也有種可能是蘋果未來的硬體裝置會做大的核心更新,也許內部開發也已經使用了Swift語言。因為在Iphone的A6及以上處理器中(iPhone5採用了A6雙核處理器),蘋果自主設計的核心已經命名為Swift了。

8、有人說蘋果是為了和Android競爭。個人認為這完全沒必要,蘋果的產品一向是“硬體和軟體的完美結合”這個特性打的天下。蘋果更大的著力點應該是在硬體上,沒必要在軟體上和人家分高低。

9、很多人看了一些swift 的教程後,覺得swift抄襲了很多語言的特性如java、c#、python。 其實用“借鑑”更合適,因為人家是蘋果。如果我們這麼做了,才叫抄襲。


相關閱讀
評論(1)

相關文章