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

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

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

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

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

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

1

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

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

 Objective- C:擴充C的面向對象編程語言。它主要使用于Mac OS X和GNUstep這兩個使用OpenStep標準的系統,是NeXTSTEP和OpenStep的基本語言。(百度百科上抄的),簡單一句話就是:objc主要是開發ios應用的(尤其iphone),因為iphone火了,所以objective-c也火了。如果硬要說objective- c有多優秀,那倒也不至于,當時nextstep選用它開發,就是因為這貨用起來比較方便。

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

 myclass *mm=[[myclass alloc] initmy:[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的寫法

?
1
2
3
4
5
6
7
|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"]; //數組

對象:

?
1
2
3
4
5
6
7
var mylist=[
 
  "name":"shenyi",
 
  "sex":"男"
 
]

循環:

?
1
2
3
4
5
6
var b=0;
 
var a= 0
    for i in 0..10 { 
        b+= i 
    

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

?
1
2
3
4
5
6
7
8
9
var a= 0
    for i in 0..10 { 
        b+= i 
    }等同于
 
var a= 0
    for var i=0;i<10;++i{
        b+= i 
    }

函數:

 

?
1
2
3
func showname(name: String, age: Int)-> String {
       return "我的名字是 \(name), 年齡 是 \(age)."
}

 

函數定義等同于java中的:

String showname(String name,int age)

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

?
1
2
3
4
5
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.net也玩不轉

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。 其實用“借鑒”更合適,因為人家是蘋果。如果我們這么做了,才叫抄襲。

10、今天我在微博上打一則招聘廣告,這么寫了:急需IOS開發,需要精通Swift,開發經驗一天。 結果有幾個網友來告訴我,很想應聘,只不過離開招聘要求還差幾個小時。~~~~~~


沈逸的IT專欄 2014-07-03 12:01:10

[新一篇] 關于程序員開發效率的悖論

[舊一篇] 為生活可以忍,侮辱技術行不行?
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表