Hello,Kotlin

Kotlin

第一次接觸Kotlin是在好幾個(gè)月前的事了,是在Bugly推送的一篇文章中看到的,PS:騰訊的同學(xué)還是很有先知先覺的。于是泉蝌,在網(wǎng)上搜索了一番,發(fā)現(xiàn)Kotlin語(yǔ)言被贊譽(yù)為Android世界里的Swift揩晴,作為Swift的鐵粉梨与,自然要馬上去嘗試一番了。于是文狱,馬上下載了官方文檔粥鞋,利用幾天的時(shí)間,將重點(diǎn)章節(jié)讀完瞄崇,就開始嘗試用Kotlin語(yǔ)言寫一些簡(jiǎn)單的app呻粹,瞬間感覺世界美好了許多。從此苏研,一發(fā)不可收拾等浊,我決定完全用Kotlin寫一款簡(jiǎn)單但很精致的app,開啟全民Kotlin時(shí)代摹蘑,這便是開發(fā)個(gè)人app的初衷筹燕。

而隨著近期我加入了一家新的公司,開始了新的工作衅鹿,我的個(gè)人app開發(fā)節(jié)奏不得不慢下來(lái)撒踪,但我不想減慢我對(duì)Kotlin語(yǔ)言的推廣工作。所以大渤,未來(lái)計(jì)劃我會(huì)把重心放在接下來(lái)一系列的Kotlin語(yǔ)言的講解當(dāng)中制妄,個(gè)人app依然會(huì)持續(xù)開發(fā),只是速度會(huì)緩下來(lái)泵三。我想耕捞,等我的個(gè)人app開發(fā)完成衔掸,你應(yīng)該已經(jīng)精通了Kotlin,可以用它進(jìn)行開發(fā)了俺抽,我會(huì)把我的個(gè)人app在github上面開源敞映,到時(shí)候歡迎大家一起往倉(cāng)庫(kù)發(fā)起pull request。

國(guó)內(nèi)現(xiàn)狀

雖然Kotlin語(yǔ)言已經(jīng)在全球引起了很大的反響磷斧,在中國(guó)卻并不流行振愿,你在拉勾網(wǎng)甚至都找不到關(guān)于招聘Kotlin語(yǔ)言的要求,在百度搜索這方面的資料也是少之又少瞳抓,這更加堅(jiān)定了我推廣Kotlin語(yǔ)言的信念,不能讓一門優(yōu)秀的語(yǔ)言被淹沒在歷史的長(zhǎng)河中伏恐。

What is Kotlin

Kotlin語(yǔ)言是由JetBrains公司開發(fā)孩哑,其初衷用于快速生成JavaScript代碼,而如今Kotlin已經(jīng)支持Android開發(fā)翠桦,并提供了一系列的Android開發(fā)插件横蜒。由于JetBrains的天然優(yōu)勢(shì)(Android Studio就是在JetBrains公司開發(fā)的IDE上面添加了一些插件而成),Android Studio對(duì)Kotlin語(yǔ)言的支持也比較到位销凑。不過(guò)丛晌,目前依然存在一些比較常見的問(wèn)題。比如斗幼,經(jīng)常會(huì)提示Kotlin插件停止運(yùn)行澎蛛,導(dǎo)致代碼提示出現(xiàn)問(wèn)題,不過(guò)Kotlin的編譯是可以正常進(jìn)行的蜕窿。所以其實(shí)谋逻,這也是一個(gè)可以克服的問(wèn)題。

有人說(shuō)桐经,Kotlin是從支持JavaScript的錯(cuò)誤道路上走了出來(lái)毁兆,我認(rèn)為這是有一定道理的。JavaScript存在很多優(yōu)秀的第三方庫(kù)阴挣,而且語(yǔ)法也相對(duì)簡(jiǎn)單气堕,Kotlin的支持并不能帶來(lái)什么天然的優(yōu)勢(shì)。而對(duì)于Android開發(fā)畔咧,我們常常不得不忍受Java語(yǔ)言冗余茎芭、繁重的語(yǔ)法。Kotlin抓住了這一點(diǎn)誓沸,迅速出擊骗爆,抓住了我們這一批早已受夠了Java語(yǔ)言冗余、啰嗦語(yǔ)法的開發(fā)者的心蔽介,使得它開始在Android開發(fā)陣營(yíng)中迅速火了起來(lái)摘投。

Ok煮寡,廢話不多說(shuō),讓我們一起來(lái)看一看Kotlin語(yǔ)言給我們帶來(lái)了什么犀呼。

Null Safe

我曾經(jīng)在文章從Swift看Java8中說(shuō)過(guò)這個(gè)問(wèn)題幸撕,空指針異常的確是困擾Java程序員很多年的問(wèn)題,Swift語(yǔ)言巧妙地解決了這個(gè)問(wèn)題外臂,Kotlin采用了一樣的解決方案坐儿,只是語(yǔ)法形式不太一樣。
我們來(lái)和Java語(yǔ)言做一個(gè)簡(jiǎn)單的對(duì)比:

Java

Room room = ...;
if(null != room && null != room.window) {
     room.window.open();
}

Kotlin

val room: Room? = ...
room?.window?.open()

從常識(shí)來(lái)說(shuō)宋光,我們知道貌矿,一個(gè)房間可能會(huì)有窗戶,也可能沒有窗戶罪佳,如果沒有窗戶逛漫,調(diào)用open方法自然就會(huì)出現(xiàn)空指針異常。Java語(yǔ)言的處理方式是在調(diào)用該方法之前進(jìn)行空值判斷赘艳,而Kotlin語(yǔ)言則使用酌毡?操作符進(jìn)行控制,意思就是蕾管,如果枷踏?前面的對(duì)象為空,則直接返回空值掰曾,后面的語(yǔ)句不再執(zhí)行旭蠕。其有一個(gè)專業(yè)叫法: Optinal Value (可選值)

相對(duì)于Java語(yǔ)言,Kotlin語(yǔ)言的處理方式簡(jiǎn)單了許多旷坦,更重要的是:媽媽再也不用擔(dān)心我的程序出現(xiàn)空指針異常了 -_-

細(xì)心的讀者應(yīng)該可以發(fā)現(xiàn)下梢,Kotlin語(yǔ)言將分號(hào)也去掉了,這和Swift語(yǔ)言的處理方式也是一致的塞蹭。

關(guān)于Optional Value的具體用法孽江,后面我會(huì)專門用一個(gè)章節(jié)來(lái)給大家講解,請(qǐng)期待后面我的Kotlin語(yǔ)言系列教程番电。

Function

在Kotlin語(yǔ)言中岗屏,類終于不再是一等公民。Kotlin語(yǔ)言開始支持面向過(guò)程編程漱办,Kotlin語(yǔ)言中可以聲明全局函數(shù)这刷,內(nèi)聯(lián)函數(shù)等,還支持函數(shù)嵌套娩井,使用函數(shù)作為方法參數(shù)等操作暇屋。對(duì)于一些簡(jiǎn)單的操作,新建一個(gè)類去處理洞辣,的確有時(shí)候是一個(gè)讓人頭疼的問(wèn)題咐刨,Kotlin語(yǔ)言終于讓我們擺脫了這一尷尬的現(xiàn)狀昙衅。

來(lái)看一看函數(shù)聲明的簡(jiǎn)單寫法,也和Java語(yǔ)言做一個(gè)簡(jiǎn)單的對(duì)比

Java

public Sting sayHello(String name) {
   return "Hello, " + name;
}

Kotlin

fun String sayHello(name: String?): String {
   return "Hello, $name"
}

函數(shù)的寫法有較大的不同定鸟,Kotlin語(yǔ)法類似Swift語(yǔ)言的寫法而涉,每個(gè)函數(shù)都必須使用fun關(guān)鍵字聲明,參數(shù)類型在后联予,參數(shù)名稱在前啼县,對(duì)于Java語(yǔ)言開發(fā)的同學(xué)可以需要一個(gè)短暫的適應(yīng)過(guò)程。

同樣地沸久,我會(huì)在后面的文章中專門對(duì)Kotlin函數(shù)進(jìn)行講解

Lambdas

閉包應(yīng)該是Java程序員非常期待的一個(gè)特性季眷,而且幸運(yùn)的是,Java8已經(jīng)開始支持這一特性卷胯。二者非常相似子刮,我們來(lái)和Java8的閉包做一個(gè)簡(jiǎn)單的對(duì)比

Java8

interface Sum {
    int add(int x,int y);
}

Sum sum = (x,y) -> x + y

Kotlin

val sum: (Int,Int) -> Int = { x,y -> x + y }

可以看到,二者的語(yǔ)法非常類似诵竭,同樣支持類型推導(dǎo)话告,支持簡(jiǎn)寫兼搏;不同的是卵慰,由于Java語(yǔ)言完全面向?qū)ο蟮奶匦裕]包必須與接口一一對(duì)應(yīng)鼻听,而Kotlin語(yǔ)言由于天然支持函數(shù)編程叠骑,可以不用聲明對(duì)應(yīng)接口敛摘,直接在參數(shù)中使用即可。

Extension

這是我最喜歡的一個(gè)特性鲤嫡,Kotlin語(yǔ)言支持對(duì)現(xiàn)有的類進(jìn)行擴(kuò)展。Java程序員應(yīng)該會(huì)對(duì)這個(gè)特性比較陌生绑莺,這也是Swift語(yǔ)言的一個(gè)特性之一暖眼。所謂擴(kuò)展,就是在不使用繼承的情況下纺裁,對(duì)現(xiàn)有的類新增方法诫肠,屬性等操作,擴(kuò)展不會(huì)破壞現(xiàn)有的類方法欺缘,僅僅在使用的時(shí)候進(jìn)行動(dòng)態(tài)添加栋豫。應(yīng)該記住一個(gè)原則: 擴(kuò)展優(yōu)于繼承
而這個(gè)特性Java語(yǔ)言并不支持。

Kotlin

fun MutableList<Int>.swap(index1: Int, index2: Int) {
      val tmp = this[index1] // 'this' corresponds to the list
      this[index1] = this[index2]
      this[index2] = tmp
}

Data Class

在開發(fā)過(guò)程中谚殊,我們常常要不斷寫一些Model類丧鸯,不斷地使用開發(fā)工具生成set/get方法。Data Class就是為簡(jiǎn)化這個(gè)操作而生的嫩絮,數(shù)據(jù)類會(huì)自動(dòng)生成set/get方法丛肢,而不用顯式生成set/get方法围肥,看下面的簡(jiǎn)單用法:

Kotlin

data class Person(var name: String?,var age: Int?)

僅僅使用這樣一行代碼就完成Model類的創(chuàng)建,Kotlin會(huì)自動(dòng)幫我們生成set/get方法摔踱,極大地簡(jiǎn)化了Model類的編寫工作虐先。不過(guò),Java程序員也不用太羨慕派敷,很多Java框架也可以實(shí)現(xiàn)這一點(diǎn)蛹批,比如Google推出的Auto Value框架等等

Operator Overloading

這個(gè)特性在Swift語(yǔ)言中也存在,在C++語(yǔ)言中也存在篮愉。這個(gè)特性是一把雙刃劍腐芍,使用操作符重載可以簡(jiǎn)化使用,也會(huì)損失一些代碼可讀性试躏。所以猪勇,在使用操作符重載的時(shí)候,請(qǐng)慎重考慮颠蕴。

關(guān)于Kotlin語(yǔ)言的特性一時(shí)半會(huì)也說(shuō)不完泣刹,下面我們就一些比較重要的特性和Java語(yǔ)言做一個(gè)簡(jiǎn)單的對(duì)比:

語(yǔ)言特性 Kotlin Java
Null Safe 支持 Java8支持
全局函數(shù) 支持 不支持
Lambdas 支持 Java8支持
Extension 支持 不支持
Data Class 支持 不支持(需要依賴框架)
Operator Overloading 支持 不支持

Java語(yǔ)言完全互通

你可能會(huì)擔(dān)心使用Kotlin語(yǔ)言之后,之前的Java代碼怎么辦犀被。這個(gè)擔(dān)心是完全多余的椅您,JetBrains保證Kotlin和Java語(yǔ)言可以實(shí)現(xiàn)完全地互相調(diào)用,Kotlin最終也會(huì)編譯成Java字節(jié)碼寡键。

Kotlin語(yǔ)言優(yōu)勢(shì)

有網(wǎng)友統(tǒng)計(jì)掀泳,使用Kotlin語(yǔ)言大約可以減少30%的代碼編寫,同時(shí)也不用再擔(dān)心空指針異常西轩,由于JetBrains的天然基因员舵,Kotlin可以獲得較好的維護(hù)、升級(jí)藕畔。最后马僻,對(duì)于Oracle公司對(duì)Google的頻繁訴訟,這也算是一個(gè)很好的還擊注服。在Kotlin語(yǔ)言發(fā)布之后韭邓,國(guó)外已經(jīng)有很多開發(fā)人員推出了大量好用的Kotlin框架,你可以不用重復(fù)創(chuàng)造輪子祠汇。同時(shí)仍秤,Kotlin語(yǔ)言可以和Java語(yǔ)言實(shí)現(xiàn)無(wú)縫連接,你還在等什么呢可很?

建議

對(duì)于Kotlin語(yǔ)言诗力,有人在知乎上提問(wèn)如何評(píng)價(jià)Kotlin語(yǔ)言?,大部分開發(fā)人員都對(duì)Kotlin語(yǔ)言抱有積極態(tài)度。我本人也非常推崇Kotlin語(yǔ)言苇本,如果你熟悉類似Python,Ruby等腳本語(yǔ)言袜茧,亦或者熟悉Swift語(yǔ)言,Kotlin語(yǔ)言將是你不二的選擇瓣窄。而如果你已經(jīng)厭倦了Java語(yǔ)言冗余繁雜的寫法笛厦,Kotlin語(yǔ)言也非常值得一試,相信你也會(huì)像我一樣愛上這門語(yǔ)言俺夕。

我的使用

目前我已經(jīng)在我的個(gè)人app和公司app中開始使用Kotlin進(jìn)行Android開發(fā)裳凸,公司的app在9月份就會(huì)和大家見面了,敬請(qǐng)期待劝贸。

歡迎加入Kotlin交流群

如果你也喜歡Kotlin語(yǔ)言姨谷,歡迎加入我的Kotlin交流群: 329673958 ,一起來(lái)參與Kotlin語(yǔ)言的推廣工作映九。

如果你還想了解更多梦湘,請(qǐng)關(guān)注后續(xù)文章后面的鏈接,后面我會(huì)添加到文章的最后件甥。如果你有什么想法捌议,可以在文章最后評(píng)論區(qū)告訴我,我會(huì)在第一時(shí)間給您回復(fù)引有。

Ok, Good night -_-

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓣颅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轿曙,更是在濱河造成了極大的恐慌弄捕,老刑警劉巖僻孝,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件导帝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡穿铆,警方通過(guò)查閱死者的電腦和手機(jī)您单,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荞雏,“玉大人虐秦,你說(shuō)我怎么就攤上這事》镉牛” “怎么了悦陋?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)筑辨。 經(jīng)常有香客問(wèn)我俺驶,道長(zhǎng),這世上最難降的妖魔是什么棍辕? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任暮现,我火速辦了婚禮还绘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栖袋。我一直安慰自己拍顷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布塘幅。 她就那樣靜靜地躺著昔案,像睡著了一般。 火紅的嫁衣襯著肌膚如雪电媳。 梳的紋絲不亂的頭發(fā)上爱沟,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音匆背,去河邊找鬼呼伸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛钝尸,可吹牛的內(nèi)容都是我干的括享。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼珍促,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铃辖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起猪叙,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娇斩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后穴翩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犬第,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年芒帕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了歉嗓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡背蟆,死狀恐怖鉴分,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情带膀,我是刑警寧澤志珍,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站垛叨,受9級(jí)特大地震影響伦糯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一舔株、第九天 我趴在偏房一處隱蔽的房頂上張望莺琳。 院中可真熱鬧,春花似錦载慈、人聲如沸惭等。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辞做。三九已至,卻和暖如春寡具,著一層夾襖步出監(jiān)牢的瞬間秤茅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工童叠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留框喳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓厦坛,卻偏偏與公主長(zhǎng)得像五垮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杜秸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容