日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Swfit是花拳繡腿嗎?談開(kāi)發(fā)語(yǔ)言與程序員的職業(yè)發(fā)展

 【作者簡(jiǎn)介】

 任旻 北京工業(yè)大學(xué)碩士, 2005年加入微軟中國(guó)有限公司,2009年加入騰訊,現(xiàn)任高級(jí)工程師,曾負(fù)責(zé)開(kāi)發(fā)“QQ概念版”、“Q+”、”QQ互聯(lián)”、“iPad QQ”等產(chǎn)品。騰訊學(xué)院講師,專利達(dá)人。一直從事互聯(lián)網(wǎng)領(lǐng)域軟件開(kāi)發(fā)和生態(tài)系統(tǒng)建設(shè)等工作。多次參加國(guó)內(nèi)外互聯(lián)網(wǎng)開(kāi)發(fā)大會(huì),曾多次在微軟 TechEd,Mix大會(huì)、業(yè)界Velocity,TopSummit,HTML5峰會(huì)以及多個(gè)開(kāi)發(fā)者沙龍上進(jìn)行過(guò)分享。

首先我們考察一下Swift究竟是一個(gè)什么樣的變成語(yǔ)言。在2014年蘋果的WWDC(世界開(kāi)發(fā)者大會(huì))上,Swift***亮相。蘋果號(hào)稱Swift有3大特性:

安全(SAFE)

● 現(xiàn)代(MODERN)

● 強(qiáng)大(POWER)

安全特性中首先介紹的是變量和常量的類型安全:

例如在下面的代碼中,Swift用關(guān)鍵字let聲明常量,關(guān)鍵字var聲明變量。

在聲明時(shí)可以指定常量和變量的類型,也可以不指定類型,而是直接賦值。Swift會(huì)通過(guò)所賦值的類型自動(dòng)將定義變量的類型。

如果聲明時(shí)不進(jìn)行賦值,那么每個(gè)類型的變量都有自己的默認(rèn)值。

例如Double類型的變量,默認(rèn)值是0。這點(diǎn)與Objective-C、C++和C語(yǔ)言不同,不對(duì)變量賦值的話,那么變量的默認(rèn)值是一個(gè)隨機(jī)數(shù)。如果不注意這點(diǎn),則很容易由此導(dǎo)致Bug的產(chǎn)生。使用Swift語(yǔ)言則可以避免這種情況發(fā)生,所以說(shuō)Swift是類型安全的。

另一個(gè)安全特性是在流程控制方面。例如下面代碼中switch語(yǔ)句有2個(gè)case語(yǔ)句。分別代表legCount為0和為1至13奇數(shù)的情況。然而顯然除了這兩種情況之外,legCount還可能是其他的值,比如:2或15等等。

Swift的語(yǔ)法規(guī)定,如果case語(yǔ)句不能覆蓋所有可能的情況,則必須加default語(yǔ)句來(lái)處理其他情況。否則編譯不能通過(guò)。

這樣可以避免由于程序員疏忽,流程沒(méi)有被switch-case經(jīng)過(guò)處理,而引起的邏輯錯(cuò)誤。

我們可以看到Swift中的安全特性確實(shí)有助于新手減少Bug和邏輯錯(cuò)誤。但是類似于“變量聲明時(shí)就有初始值”的特性在JavaScript,C#等多種現(xiàn)代語(yǔ)言中早已實(shí)現(xiàn)了。

在功能強(qiáng)大方面,有一個(gè)特性中是對(duì)字符串操作的簡(jiǎn)化,在下面的代碼中,Swfit可以用\(a)的形式,代替C語(yǔ)言中對(duì)字符串format操作。大大簡(jiǎn)化了代碼,增加了程序的可讀性。

無(wú)獨(dú)有偶,在WWDC2015中,蘋果在新版的Safari和WebKit中增加了一個(gè)針對(duì)JavaScript的新特性。這個(gè)特性可以使用${變量}的符號(hào),代替?zhèn)鹘y(tǒng)的使用“+”對(duì)字符串進(jìn)行拼接的操作。

在項(xiàng)目實(shí)踐中,類似的字符串拼接應(yīng)用較多的是日志操作。一般都已經(jīng)封裝成為組件了。所以,雖然這種語(yǔ)法可以簡(jiǎn)化代碼,但對(duì)于工程的影響不大。

另一個(gè)與功能強(qiáng)大相關(guān)的特性是對(duì)Unicode的支持

例如下面的代碼中可以直接使用蘋果的emoji圖標(biāo)寫(xiě)程序。每一個(gè)小老鼠的圖標(biāo)可以作為一個(gè)字符(character)處理。

網(wǎng)上還有網(wǎng)友利用Swift的這個(gè)特性寫(xiě)了一個(gè)諾亞方舟的故事。

另一個(gè)強(qiáng)大的功能是For-in語(yǔ)句的增強(qiáng)。

比如在For-in語(yǔ)句中使用0…4表示循環(huán)時(shí)取[0,4]的閉區(qū)間內(nèi)整數(shù)值。

還可以在For-in中使用“元組”遍歷Dictionary。

另外用“n…m”的形式表示[n,m]閉區(qū)間的語(yǔ)法也可以應(yīng)用在switch-case語(yǔ)句中:

以上就是蘋果WWDC2014中對(duì)Swift功能強(qiáng)大方面的一些介紹。然而,從上面的例子可以看出,這些新特性更像是一些語(yǔ)法糖。語(yǔ)法糖在維基百科上的定義如下:

語(yǔ)法糖(Syntactic sugar),也譯為糖衣語(yǔ)法,指計(jì)算機(jī)語(yǔ)言中添加的某種語(yǔ)法,這種語(yǔ)法對(duì)語(yǔ)言的功能并沒(méi)有影響,但是更方便程序員使用。通常來(lái)說(shuō)使用語(yǔ)法糖能夠增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會(huì)。

維基百科上除了有語(yǔ)法糖,還有“語(yǔ)法鹽”和“語(yǔ)法糖精”2個(gè)概念。分別代表特別難用的語(yǔ)法,和看似很好用但實(shí)際有害的語(yǔ)法。比如在Swift beta版中在for-in語(yǔ)句中可以使用“n..m”語(yǔ)法。表示從n開(kāi)始,循環(huán)m次。例如:

但是在正式版中,這種寫(xiě)法被取消了。因?yàn)椤皀..m”和“n…m”這兩種寫(xiě)法太相似了,如果都保留就會(huì)引起混淆,降低程序的可讀性,成為“語(yǔ)法鹽”或者“語(yǔ)法糖精”了。

現(xiàn)在評(píng)價(jià)Swift中的新語(yǔ)法是語(yǔ)法糖還是語(yǔ)法鹽還為時(shí)尚早,需要時(shí)間和市場(chǎng)的檢驗(yàn)。

接下來(lái)考察一下Swift中Modern的特性

首先是閉包。在下面的代碼中,repeat函數(shù)可以接受一個(gè)閉包類型的task參數(shù)。在調(diào)用repeat函數(shù)時(shí),傳入的第二個(gè)參數(shù)是一個(gè)函數(shù)體,其中包含了一行打印語(yǔ)句。

那么什么是閉包呢?

閉包有以下3個(gè)特點(diǎn):

? 匿名函數(shù)(方法)

? 可以被執(zhí)行

? 可以被作為參數(shù)傳遞

提到閉包,想必很多人都會(huì)想到JavaScript。我們就來(lái)對(duì)比一下JavaScript的閉包。

我們可以看到在上述代碼中,sayAlert是閉包,也滿足上述3個(gè)特點(diǎn)。

其實(shí)滿足上述3個(gè)特點(diǎn)的語(yǔ)法還有很多,只是名字不一樣而已。比如Java和C#中的Lamda表達(dá)式:

這是一段C#代碼,delegate關(guān)鍵字用于定義一個(gè)函數(shù)簽名。比如用del為名稱,定義了一個(gè)參數(shù)int返回int的函數(shù)。接下來(lái)用Lamada表達(dá)式定義了函數(shù)體為“x =>x * x”表示返回參數(shù)x的平方。

此時(shí)myDelegate可以被調(diào)用和傳遞,因此就成為了一個(gè)閉包。

更廣義的說(shuō),C中的“指向函數(shù)的指針”也滿足上述的3個(gè)條件。

因此,閉包雖然是現(xiàn)代語(yǔ)言的特性,但是很多語(yǔ)言都支持,并不能算一個(gè)很新穎的特性。

另一個(gè)現(xiàn)代的特性是“泛型”

在Swift中使用泛型很方便,語(yǔ)法和Java、C#、C++也很類似。

不過(guò)使用Objective-C的朋友也有福了,在即將發(fā)布的XCode7中,Objective-C也支持泛型了。

因此我們大可不必因?yàn)榉盒投D(zhuǎn)向Swift。

Swift中還有一個(gè)特性是“nullable”的變量類型,也叫可選(Optional)變量。

這是一個(gè)很方便的特性。比如一個(gè)返回值為int的函數(shù),可以通過(guò)返回nil來(lái)表示函數(shù)出錯(cuò)的情況。而不需要使用NSError,也不需要通過(guò)返回某些特殊int值來(lái)表示錯(cuò)誤,比如“-1”或“-IntMax”。

不過(guò)類似的語(yǔ)法在10年前的C#2.0中就出現(xiàn)了。

以上是微軟官網(wǎng)MSDN上的示例代碼??梢钥吹剑p問(wèn)號(hào)“??”操作符也是在C#中先出現(xiàn)的。

以上是蘋果WWCD2014中介紹的Swfit1.0的特性,在今年的WWDC2015中,蘋果發(fā)布了Swift2.0。其中增加了一個(gè)呼聲特別高的特性:通過(guò)類似try-catch的語(yǔ)法支持Error處理。

通過(guò)示例代碼可以看出,Swift支持使用多個(gè)catch語(yǔ)句捕獲不同類型的Error。而且也支持使用finally語(yǔ)句。

不過(guò)這WWDC2015大會(huì)上PPT中的代碼與微軟官方文檔中的一段代碼非常相似:

介紹了這么多Swift的特性,那么應(yīng)該如何評(píng)價(jià)Swift語(yǔ)言呢?

從客觀上講,Swift中確實(shí)包含了“安全、現(xiàn)代、強(qiáng)大”的特性,但是這些特性在其他語(yǔ)言上早就有支持。因此這些特性與其他語(yǔ)言相比(包括Objective-C)并沒(méi)有絕對(duì)優(yōu)勢(shì)。

對(duì)于一個(gè)編程語(yǔ)言,除了語(yǔ)言特性之外,還可以從以下3個(gè)方面進(jìn)行比較:

? 代碼效率

? 學(xué)習(xí)成本

? 生態(tài)環(huán)境

其中代碼效率又可以分為代碼的“書(shū)寫(xiě)效率”、“編譯效率”和“運(yùn)行效率”

如果與Objective-C比較,Swift在書(shū)寫(xiě)效率上完勝。

在編譯效率上,由于Swift沒(méi)有.h頭文件和一些其他特性,因此比Objective-C在理論上要快。

但是從實(shí)際工程上來(lái)講,我們內(nèi)部的一個(gè)iOS項(xiàng)目,包含了幾千個(gè)Objective-C的文件,完全編譯一次需要30分鐘左右。

對(duì)于這種情況來(lái)說(shuō),顯然不能通過(guò)遷移到Swift來(lái)解決,而是需要重構(gòu)。

如果是小型項(xiàng)目,則編譯時(shí)間相差就不大了。

對(duì)于Swift和Objective-C的運(yùn)行效率,primateLab進(jìn)行了一個(gè)對(duì)比測(cè)試。結(jié)果如下:

通過(guò)右側(cè)的平均值對(duì)比可以看出:

1.   在CPU負(fù)荷較大的Mandelbrot的測(cè)試中,Swift取得了與C++相近的成績(jī)。

2.   在GEMM測(cè)試中(側(cè)重于大數(shù)據(jù)在有限內(nèi)存中順序讀取操作),Swift與C++差距變大了。

3.   在FFT測(cè)試中(大數(shù)組隨機(jī)讀取),C++取得的成績(jī)是Swift的近10倍。

因此可以看出,從運(yùn)行效率上看,Swift不能完全勝任所有的場(chǎng)景。

綜上所述:Swift在代碼效率的3各方面,雖然有一定優(yōu)勢(shì),但是還不能由此得出“我們應(yīng)該轉(zhuǎn)向Swift”的結(jié)論。

我們繼續(xù)從第三個(gè)方面:學(xué)習(xí)成本上考察Swift。

Swift雖然屬于類C(C-Family)的語(yǔ)言,在保留了大括號(hào),if-else,do-while,swich-case-default 等語(yǔ)法元素之外,也創(chuàng)新了許多新語(yǔ)法。有些語(yǔ)法形式(比如枚舉類型)變化較大。學(xué)習(xí)Swift語(yǔ)法可能比Objective-C容易一些,但是也不會(huì)是零 門檻的。

此外使用Swift開(kāi)發(fā)應(yīng)用必須依賴Cocoa框架,對(duì)于之前沒(méi)有接觸Cocoa的程序員,這是一塊很大的隱性成本。

這里引用JavaEye社區(qū)創(chuàng)始人Robin的一句話供大家參考。

“對(duì)程序員來(lái)說(shuō),熟悉Swift語(yǔ)法也不過(guò)一天時(shí)間足夠了。關(guān)鍵是要提供高級(jí)數(shù)據(jù)類型,簡(jiǎn)化Cocoa類庫(kù),否則用不用Swift都沒(méi)區(qū)別?!?/p>

Swift語(yǔ)言的學(xué)習(xí)成本并不像媒體上宣傳的那么低。所以我們還需要從第四個(gè)方面——生態(tài)環(huán)境方面進(jìn)行考察。

生態(tài)環(huán)境是一個(gè)比較抽象的概念。這里我們把生態(tài)環(huán)境簡(jiǎn)化為2個(gè)問(wèn)題:

1.   是否有很多開(kāi)源工程可以借鑒?

2.   有了問(wèn)題是否能快速找到答案?

對(duì)于***個(gè)問(wèn)題,我們可以參考一下Github上開(kāi)源項(xiàng)目的統(tǒng)計(jì)數(shù)據(jù)(http://githut.info)。

Swift雖然在“活躍代碼庫(kù)”數(shù)量上比較少,但是在“代碼庫(kù)平均分支”數(shù)量和“代碼庫(kù)平均關(guān)注者”這兩個(gè)指標(biāo)上都處于領(lǐng)先地位。由此可以看出,Swift有一群熱情非常高的愛(ài)好者,盡管愛(ài)好者絕對(duì)數(shù)量可能不多,但是加速的趨勢(shì)很大。后續(xù)的發(fā)展是非常值得期待的。

第二個(gè)問(wèn)題“有了問(wèn)題是否能快速找到答案?”,我們可以參考一下Stackflow網(wǎng)站做的一個(gè)調(diào)查。其中***語(yǔ)言榜單中,與Github一樣,JavaScript排名***。而Swfit卻沒(méi)有入圍。

但是在***的語(yǔ)言榜單上,Swift排名***。

再次證明程序員對(duì)Swift的熱情很高。

綜合上面的兩個(gè)問(wèn)題,可以看出Swift的熱度很高,但是當(dāng)前成熟度還不夠高。我們接下來(lái)考察生態(tài)環(huán)境中另一個(gè)因素:框架。

我們與***的JavaScript對(duì)比一下。在Google上搜索“JavaScript framework”,可以看到排名靠前的搜索結(jié)果是關(guān)于JavaScript框架的對(duì)比、排名,以及如何選擇框架的文章,對(duì)于一個(gè)具體框架的介紹排名在 第五位。而且為大多數(shù)人熟知jQuery、Zepto已經(jīng)不再搜索結(jié)果的***頁(yè)上了。

由此我們可以看出JavaScript的創(chuàng)新性、活躍度和生命力都非常高,不愧為***的語(yǔ)言。

與之相比,Swift就只能基于一種框架進(jìn)行開(kāi)發(fā)——Cocoa。Swift可以說(shuō)是與平臺(tái)強(qiáng)相關(guān)的,離開(kāi)蘋果平臺(tái),Swift恐怕沒(méi)有用武之地。 最近十幾年我們看到微軟、諾基亞的起起落落。因此在我們決定是否選擇Swift的時(shí)候,我們對(duì)蘋果的前景和信心也是一個(gè)重要的考量因素。

以上我們從語(yǔ)言特性、代碼效率、學(xué)習(xí)成本和生態(tài)環(huán)境4各方面考察了Swift。除此以外,還有一些因素值得考慮。

***個(gè)是調(diào)試工具。JavaScript作為一個(gè)前臺(tái)語(yǔ)言為什么這么流行?一個(gè)重要因素是諸如像Google Chrome和FireFox等工具為JavaScript提供了相當(dāng)完善、相當(dāng)優(yōu)秀的調(diào)試工具。

另外一個(gè)因素是跨平臺(tái)開(kāi)發(fā)。我們是否愿意把自己押寶在一個(gè)平臺(tái)上,賭這一個(gè)平臺(tái)的成敗。Php和JavaScript是幾乎沒(méi)有平臺(tái)的概念。但如果 做移動(dòng)端開(kāi)發(fā)的話,顯然還是要選擇一個(gè)平臺(tái)的。不過(guò)最近Facebook推出了一個(gè)框架:Reactive Native。雖然還不完善,但我們可以想象一下,如果我們能用JS開(kāi)發(fā)iOS,那我們還會(huì)學(xué)Swift嗎?

除了開(kāi)發(fā)之外,在實(shí)際項(xiàng)目中還有許多工作要做。比如測(cè)試,比如對(duì)測(cè)試結(jié)果的分析,對(duì)上線后應(yīng)用運(yùn)行狀況的分析。如果上線后很多用戶出現(xiàn)程序閃退,如何知道閃退原因?定位問(wèn)題?

在騰訊內(nèi)部,有一個(gè)公用的crash定位模塊。每個(gè)App都可以使用這個(gè)模塊。這個(gè)模塊可以幫助App定位和分析crash的數(shù)量、類別、原因等信息。

現(xiàn)在這個(gè)模塊已經(jīng)對(duì)外公布出來(lái)了,名為Bugly。騰訊之外的app也可以使用這個(gè)模塊了。有興趣的同學(xué)可以訪問(wèn)http://bugly.qq.com,也可以關(guān)注微信公眾號(hào):weixinBugly。

以上我們對(duì)Swift做了多方面的分析和對(duì)比。現(xiàn)在可以回答我們?cè)诒疚囊婚_(kāi)始提出的問(wèn)題了。

1. 我們是否應(yīng)該開(kāi)始學(xué)習(xí)Swift呢?

答案是肯定的。Swift中融合了許多現(xiàn)代語(yǔ)言中先進(jìn)的特性。通過(guò)學(xué)習(xí)Swift可以了解現(xiàn)代語(yǔ)言的發(fā)展趨勢(shì)。多掌握一門語(yǔ)言也有助于橫向?qū)Ρ龋羁痰牧私庹Z(yǔ)言特性的本質(zhì),同時(shí)也是提高自己的眼界和學(xué)習(xí)能力的一個(gè)高效的手段。

2. 我的項(xiàng)目是否應(yīng)該遷移到Swift?

這個(gè)問(wèn)題要具體情況具體分析。首先要看團(tuán)隊(duì)的能力。如果團(tuán)隊(duì)的學(xué)習(xí)能力很強(qiáng),則可以考慮使用Swift。但是也不絕對(duì),如果團(tuán)隊(duì)經(jīng)驗(yàn)非常豐富,在 iOS上面擁有五年以上的開(kāi)發(fā)歷史,那就要慎重一些了,因?yàn)檫@樣會(huì)增加學(xué)習(xí)成本。如果團(tuán)隊(duì)很年輕,經(jīng)驗(yàn)也不多則可以考慮使用Swift。

接下來(lái)還要考慮項(xiàng)目的構(gòu)成。比如包含上千個(gè)C語(yǔ)言的文件,那么轉(zhuǎn)換的成本就太高了。而且會(huì)嚴(yán)重影響應(yīng)用的穩(wěn)定性。如果是全新的項(xiàng)目,就可以考慮使用Swift了。

從上面的分析可以看出,一門語(yǔ)言對(duì)項(xiàng)目的影響并沒(méi)有那么大,對(duì)于程序員職業(yè)發(fā)展的影響也沒(méi)有那么大。

程序員可能有很多發(fā)展方向,在這些方向上除了關(guān)注語(yǔ)言,開(kāi)發(fā)需求,改Bug,還有很多更重要的事情。在下圖中我列舉了程序員的一些發(fā)展方向和對(duì)應(yīng)的關(guān)注點(diǎn)。

另外,無(wú)論我們做什么工作都需要的一些通用能力,比如學(xué)習(xí)能力,分析和解決問(wèn)題的能力,創(chuàng)新能力,傳承知識(shí)和培養(yǎng)人才的能力,溝通能力等等。

Swift是花拳繡腿嗎?

Swift就好比是一套武功招式,它能否發(fā)揮巨大威力,不取決于招式本身,而取決于使用者內(nèi)功。只有自己變強(qiáng),才能將Swift的特性得到***的發(fā)揮,做出優(yōu)秀的應(yīng)用。

所以我們還是要關(guān)注自身的成長(zhǎng),在Swift的語(yǔ)言之外學(xué)習(xí)更多的東西。

 


文章題目:Swfit是花拳繡腿嗎?談開(kāi)發(fā)語(yǔ)言與程序員的職業(yè)發(fā)展
當(dāng)前鏈接:http://m.5511xx.com/article/dpijjoc.html