歡迎加入QQ討論群258996829
Swift 頭像
蘋果5袋
5
Swift

蘋果Swift:易于入門的新型表達(dá)方式

發(fā)布時間:2014-07-03 14:58  回復(fù):0  查看:3266   最后回復(fù):2014-07-03 14:58  

【IT168 技術(shù)】如何才能證明企業(yè)自身的雄厚財力?當(dāng)耀眼的私人飛機(jī)與閃亮的總部大樓不足以說明問題的時候,新型編程語言開始肩負(fù)起這一“歷史重任”。時至今日,蘋果已經(jīng)繼微軟(C#)、Sun(Java)、以及谷歌(Dart與Go)之后走上了同一條道路,為我們帶來Swift——一款采用類C型語法、旨在幫助編程人員輕松為Mac及iPhone開發(fā)全新應(yīng)用程序的編程語言后起之秀。

雖然怎樣估量蘋果的高傲風(fēng)格都不為過,但Swift絕不僅僅是那種出于虛榮心而建立、希望像英語一般在全球技術(shù)人員中占據(jù)統(tǒng)治地位的計算機(jī)編程方案項目。蘋果的軟件堆棧自NeXT歸入該公司后一起緊緊圍繞在Objective-C這一絕對核心周圍,而眾多新手在接觸之后普遍抱怨其指針、文件(.m與.h皆是如此)以及包含大量標(biāo)點符號的語法令人頭痛不已。

蘋果曾于1997年嘗試?yán)谩艾F(xiàn)代語法”對該語言進(jìn)行更新,但群眾用戶明確表示拒絕放棄所謂經(jīng)典語法。而其它項目——例如將Java綁定包添加到Cocoa庫當(dāng)中——則始終沒有真正得到堅持與貫徹。時至今日,Objective-C語言已經(jīng)成為鼓勵開發(fā)人員為蘋果平臺編寫代碼時所面臨的最大障礙之一。

好消息是:Swift將成為一份偉大的禮物,足以幫助任何希望擺脫Objective-C這道難關(guān)的開發(fā)人員。曾經(jīng)學(xué)習(xí)過如何利用Java進(jìn)行匯編計算機(jī)科學(xué)、怎樣通過JavaScript創(chuàng)建Web頁面以及如何借助Ruby構(gòu)建網(wǎng)站的程序員將在Swift當(dāng)中獲得相當(dāng)貼心的熟悉之感。多文件與繼承過程非常平順,而標(biāo)點符號也不再在代碼表達(dá)當(dāng)中占據(jù)主導(dǎo)性地位,這一切顯然都可算是Swift的顯著優(yōu)勢。除此之外,這款新語言在自動化功能方面也更為豐富,其中包括輸入內(nèi)容自動推斷以及引用計數(shù)——旨在幫助編譯器糾正程序員在開發(fā)過程中經(jīng)常出現(xiàn)的錯誤。

為什么要推出Swift?

很多人可能不太理解,蘋果公司為什么不直接選擇一款已經(jīng)在市場上擁有一定基礎(chǔ)的現(xiàn)有語言。JavaScript在Web逐漸占領(lǐng)世界的時代背景下可算一項理想方案,但它并不能提供全部指向字節(jié)的低級訪問,而這顯然將導(dǎo)致系統(tǒng)程序員額外構(gòu)建更多接口以定義蘋果應(yīng)用的使用體驗。無論如何,JavaScript程序員們已經(jīng)在使用PhoneGap/Cordova等框架。而以Python或者Ruby等語言為代表的其它語言都能與Unix后端順暢集成,但它們都缺乏與系統(tǒng)軟件深入對接的能力。最好的答案可能是充分利用蘋果在Cocoa層已經(jīng)投入的龐大研發(fā)資源,而Swift則是在保護(hù)過往投入的同時帶來現(xiàn)代便利特性的最佳途徑。

Swfit程序的基礎(chǔ)結(jié)構(gòu)看起來與Java非常相近。代碼內(nèi)容被拆分成類,這些類又由字符段與方法填充而成。其中最具決定性的差異感戴,這些方法以關(guān)鍵字(func)為起首,而返回值則位于方法名稱之后而非之前。這些類能夠被分配到結(jié)構(gòu)當(dāng)中,而該結(jié)構(gòu)擁有大量繼承自原有機(jī)制的面向?qū)ο蟠a內(nèi)容;此外屬性可以利用點語法進(jìn)行讀取。

大家需要掌握的就只有高級路線圖與一部分關(guān)于聲明變量語法的具體知識。就在蘋果發(fā)布Swift語言的幾天之內(nèi),利用Swift編寫的開源軟件已經(jīng)開始出現(xiàn)在GitHub之上。其中最引人注目的項目包括由Nate Murray編寫的“Flappy Bird”復(fù)刻版,它只使用了兩個主Swift文件與一點點接合代碼。如果大家已經(jīng)擁有自己擅長的OS X或者iOS編程方式,肯定能夠快速上手Swift這種新型表達(dá)方式。Murray表示,他只用了一天就完成了自己的游戲復(fù)刻工作。

Swift修復(fù)了一部分最受詬病的Java語法。大家根本不需要浪費輸入操作來拼寫出每一個變量類型;編譯器從一開始就能夠自動推斷我們打算輸入的內(nèi)容。各位能夠享受的顯著優(yōu)勢之一在于,編譯器可以在無需大量關(guān)鍵字的前提下檢查變量類型。如果大家打算將多種變量與字符串接合在一起,Swift提供的一套簡單模板能夠僅僅通過三次輸入將輸入變量轉(zhuǎn)換為字符串。這實在堪稱一大壯舉。

Swift帶來的提升還不止于此。Scode現(xiàn)在提供所謂“playground”,大家可以在這里輸入代碼并直接觀看用戶手指操作時這些代碼的執(zhí)行效果。這樣的沙箱機(jī)制讓開發(fā)人員學(xué)習(xí)JavaScript與JavaScript API的道路變得更為順暢而簡單。舉例來說,谷歌僅僅提供一套“playground”Web頁面就成功為其谷歌地圖API吸引到了眾多開發(fā)者擁躉。Xcode的playground在效果上遠(yuǎn)遠(yuǎn)超過了谷歌的方案,因為它能夠直接將灰色選定部分的代碼運(yùn)行效果顯示在右側(cè)區(qū)域內(nèi),從而幫助大家了解該語言如何執(zhí)行。我在使用playbround過程中遇到的惟一負(fù)面問題是,我曾經(jīng)遇上過數(shù)次崩潰情況而且無法成功重現(xiàn)。請大家相信,我絕對沒有犯過那種“除以0”的低級錯誤。這一次崩潰了,下一次重新執(zhí)行時卻一切正?!獙嵲谟悬c詭異。

縱觀Swift帶來的全部提升與改進(jìn),我發(fā)現(xiàn)Swift的規(guī)模實在有點嚇人。盡管根據(jù)Nate Murray在一天之內(nèi)成功完成“Flappy Bird”復(fù)刻來看其使用難度并不高,但該語言另外也有很多不可能在幾分鐘內(nèi)掌握的重要細(xì)節(jié)。我花了很長一段時間希望搞清根據(jù)值(struct)進(jìn)行傳輸?shù)臄?shù)據(jù)與根據(jù)指針(class)傳輸?shù)臄?shù)據(jù)之間到底有什么不同。弄明白這些差異在C語言編程工作當(dāng)中就是一大挑戰(zhàn),而對于Swift程序員來說這項任務(wù)依然困難、特別是對那些希望能讓自己代碼獲得最佳性能表現(xiàn)的開發(fā)者而言更是如此。

優(yōu)化工作對于某些特定代碼類型來說也可能成為令人頭痛的實際障礙。舉例來說,字符串始終根據(jù)值進(jìn)行傳輸,也就是說Swift會在每一次函數(shù)調(diào)用時從左到右對字符串內(nèi)容進(jìn)行復(fù)制。這種處理方式對于游戲這類以圖形元素為基礎(chǔ)的程序來說也許并不算什么問題,但像Web服務(wù)器與內(nèi)容管理系統(tǒng)這樣的程序從本質(zhì)上講則屬于連結(jié)機(jī)制。任何打算從字符串入手的開發(fā)人員都需要在編寫Swift代碼的時候認(rèn)真考慮這種情況。他們可能最終需要對類當(dāng)中的字符串值進(jìn)行打包以防止上述復(fù)制過程。

我還指定了其它一些需要深入研究的議題。舉例來說,向下轉(zhuǎn)換允許大家利用類型轉(zhuǎn)換運(yùn)算符(as)將關(guān)注對象從類轉(zhuǎn)移到子類身上。這可能會導(dǎo)致問題,因為還有另一種添加問號的類型轉(zhuǎn)換運(yùn)算符(as?),如果向下轉(zhuǎn)換無法成功、該運(yùn)算符則會返回“零”值。有一些此類可選功能會由于存在問號或者不存在問號而徹底改變關(guān)鍵字的執(zhí)行效果。而另一項特性,也就是子腳本,允許大家快速接入某個類并提取出一個特定值。Swift雖然帶來了可觀的簡潔性提升,但卻也大大增加了出現(xiàn)表達(dá)混淆的潛在可能性。

新增的playground能夠在我們輸入Swift代碼的同時對內(nèi)容進(jìn)行評估。大家在左側(cè)輸入的代碼內(nèi)容會直接以效果形式顯示在右側(cè)區(qū)域當(dāng)中。

一項重大承諾

如果有人告訴大家Swift是一種簡單的語言,請絕對不要相信他。盡管對于編寫“hello world”或者只有幾行代碼的簡單應(yīng)用程序來說它足夠易用,但從另一個角度看,要編寫出具備無數(shù)細(xì)節(jié)并存在細(xì)微差異因素的應(yīng)用則需要我們花費大量時間磨煉自己的水平。熟練的程序員們會樂于將自己的技術(shù)實力以及聰明才智運(yùn)用到自己的軟件成果當(dāng)中,但很多新手肯定會發(fā)現(xiàn)這類代碼內(nèi)容很難閱讀。這絕不是一種能夠輕易掌握的語言,大家千萬別被它簡單上手的表象給迷惑了。

關(guān)于Swift,最需要認(rèn)真考慮的就是其發(fā)展前景。盡管一部分規(guī)模相對較小的新語言往往給人一種玩具般的感覺,但Swift卻絕對是一項重大承諾。關(guān)于Swift開發(fā)的第一本指南教程非常優(yōu)秀,這一方面是因為它擁有超過850頁的浩大篇幅。Xcode下載包現(xiàn)在已經(jīng)達(dá)到2.5GB。Swift語言并不是一種使用難度很低但只能應(yīng)對輕量級開發(fā)任務(wù)的玩物——它是名符其實的一款完整軟件包,設(shè)計目的在于為任何技術(shù)團(tuán)隊的程序員們提供足以支持重大項目的開發(fā)方案。

Swift語言當(dāng)中還包含大量“鉤子”及其它用于同現(xiàn)有Cocoa庫進(jìn)行協(xié)作的工具。蘋果并不希望重新編寫其iOS及OS X堆棧,因此Swift能夠與之前的代碼輕松對接。整個Swift項目的建立目的在于維持開發(fā)者對于這些堆棧的興趣并幫助有志投向于應(yīng)用程序開發(fā)的朋友能夠更輕松地跨過這道門檻。與此同時,大家還可以在自己的iOS或者OS X項目當(dāng)中盡可能多或者盡可能少地使用Swift代碼——具體情況各位可以隨性而為。

蘋果并沒有以強(qiáng)制性手段推動Swift。毫無疑問,很多保守派開發(fā)人員會繼續(xù)堅持使用Objective-C。不過Swift能讓原本熟悉其它語言及傳統(tǒng)機(jī)制的程序員們快速上手這種新的開發(fā)途徑,拿起Xcode這柄利器馬上投入到實際生產(chǎn)當(dāng)中。單這一項就足以成為蘋果公司發(fā)展歷程上的一大步,而且也很可能帶來數(shù)量原超過從前的原生iOS與OS X代碼。Swift并不打算接管整個世界——它更像是一份專門送給開發(fā)者們的大禮。

您還未登錄,請先登錄

熱門帖子

最新帖子

?