Android開(kāi)發(fā):為什么要使用Kotlin划址?

在使用Kotlin進(jìn)行了一段時(shí)間的Android開(kāi)發(fā)之后,我深深地體驗(yàn)到了它的美好限府,覺(jué)得是時(shí)候把它拿出來(lái)安利一下了夺颤。

1. Kotlin是什么?

Kotlin是一門(mén)編程語(yǔ)言胁勺,由JetBrains公司開(kāi)發(fā)的世澜。JetBrains就是那個(gè)開(kāi)發(fā)了無(wú)數(shù)個(gè)牛逼IDE的公司,Android Studio就是建立在他家的Intellij之上的署穗。
Kotlin是基于JVM的寥裂,所以開(kāi)發(fā)者可以什么方便地用它來(lái)進(jìn)行Android開(kāi)發(fā)——支持Kotlin和Java的混合編寫(xiě)。

2. 為什么要使用Kotlin案疲?

我覺(jué)得它之所以適合Android開(kāi)發(fā)封恰,主要是因?yàn)橐韵碌奶攸c(diǎn):

2.1 簡(jiǎn)潔、優(yōu)雅

寫(xiě)了很多年的Java之后褐啡,再寫(xiě)Kotlin俭驮,真是覺(jué)得如沐春風(fēng)。
除了不用寫(xiě)分號(hào)以及天然支持Lambda表達(dá)式之外春贸,它的語(yǔ)法本身就比Java簡(jiǎn)潔許多。

舉幾個(gè)小例子遗遵,比如萍恕,類(lèi)型推導(dǎo):

    val a : Int = 1 // 正常的聲明、賦值
    val b = 2 // 類(lèi)型推導(dǎo)车要,可以省略Int聲明 
    
    /* 定義函數(shù):自動(dòng)推導(dǎo)函數(shù)的返回值類(lèi)型 */
    fun sum(a: Int, b: Int) = a + b

字符串模板:

    val name = "Barry"
    val age = 15
    print("My name is ${name}, I am ${age} ")  // 會(huì)打印出: My name is Barry, I am 15

下面這個(gè)例子允粤,可以對(duì)比體會(huì)一下他們的不同—— 遍歷一個(gè)列表,打印其中的奇數(shù)。
如果用java寫(xiě):

List list = Arrays.asList("H",1,3,10,5,9,20,199);
for(Object number : list){
    if(!(number instanceof  Integer)) {
        continue;
    }
    if((Integer)number % 2 == 0){
        System.out.println((Integer)number);
    }
}

而用Kotlin的話(huà)类垫,顯然會(huì)更清晰司光、簡(jiǎn)潔、優(yōu)雅(注意這里的lambda表達(dá)式):

val list = Arrays.asList("H", 1, 3, 10, 5, 9, 20, 199)
list.filter { it is Int }
        .filter { it as Int % 2 != 0 }
        .forEach { println(it) }

在Kotlin中悉患,諸如此類(lèi)的語(yǔ)法糖還有很多:函數(shù)默認(rèn)值残家、內(nèi)聯(lián)函數(shù)、ranges售躁、kv遍歷Map坞淮、lazy屬性、數(shù)據(jù)對(duì)象聲明陪捷、運(yùn)算符重載…… 如果展開(kāi)來(lái)說(shuō)的話(huà)回窘,每個(gè)都可以說(shuō)很多。

當(dāng)習(xí)慣這些之后市袖,很容易就會(huì)有這種感覺(jué):寫(xiě)Kotlin相比較寫(xiě)Java啡直,就像高鐵之于綠皮火車(chē)、iPhone之于山寨機(jī)苍碟、4K屏之于800*600……沒(méi)有它之前覺(jué)得老的東西也能用酒觅,但是一旦習(xí)慣,再改回去的話(huà)就覺(jué)得渾身難受驰怎。

另外阐滩,簡(jiǎn)潔的語(yǔ)法不僅使代碼讀起來(lái)清晰流暢,也讓它自然簡(jiǎn)單易學(xué)——基本上花上半天時(shí)間县忌,把官方文檔看上一遍掂榔,就可以開(kāi)始coding了。

2.2 安全

在Java里症杏,我們常常要進(jìn)行許多非空判斷:

public void fun1 (String str){
   if(str != null) {
       System.out.println("Length = " + str.length());
   }
}

而在Kotlin中装获,即使不進(jìn)行這些額外的判斷,代碼也是健壯的:

// 如果str=null厉颤,會(huì)打友ㄔァ:Length = null
fun fun1 (str: String?) {
    println("Length = " + str?.length) 
}

還有,Java中經(jīng)常出現(xiàn)的ClassCastException逼友,在Kotlin中精肃,也可以通過(guò)安全的類(lèi)型轉(zhuǎn)換進(jìn)行避免:

val l2 = listOf("A",1,3,6,8,'c')
l2.forEach { println(it as? Int) }

2.3 函數(shù)、屬性擴(kuò)展

Kotlin提供了一種方法——可以在既不需要繼承父類(lèi)帜乞,也不需要使用類(lèi)似裝飾器設(shè)計(jì)模式的情況下司抱,對(duì)類(lèi)進(jìn)行擴(kuò)展。簡(jiǎn)直是黑科技黎烈!
比如习柠,給String類(lèi)添加一個(gè)擴(kuò)展方法匀谣,用以返回它的第一個(gè)字符。只需要這樣:

// 函數(shù)擴(kuò)展
fun String.firstChar() : String? {
    return if(this.length > 0) this.substring(0,1) else "NULL"
}

這個(gè)擴(kuò)展函數(shù)可以在任何地方聲明资溃,然后其他任何地方String對(duì)象就都可以使用這個(gè)方法了:

val s = "Hello".firstChar())  // s的值為"H"
println("你好".firstChar())   // 打游漪帷: 你
println("".firstChar())   // 打印: NULL

2.4 兼容Java

一個(gè)語(yǔ)言能否被廣泛使用溶锭,除了它本身要好用之外宝恶,還要有一個(gè)良好的生態(tài)。 尤其在是如今暖途,各種應(yīng)用層的開(kāi)發(fā)實(shí)際上很依賴(lài)于各種開(kāi)源庫(kù)卑惜、第三方組件等,如果一個(gè)應(yīng)用層的語(yǔ)言沒(méi)有這些支持的話(huà)驻售,是很難被廣泛使用的露久。
而對(duì)于Kotlin來(lái)說(shuō),這個(gè)問(wèn)題是不存在的欺栗,因?yàn)樗鶭ava是無(wú)縫連接的毫痕,可以相互操作。
這意味著:

  • Kotlin可以使用所有用Java寫(xiě)的組件:(RxJava迟几、Retrofit消请、EventBus、Fresco……這些都不是問(wèn)題@嗳)
  • 在現(xiàn)有的用Java寫(xiě)的項(xiàng)目中可以局部使用Kotlin臊泰,混合開(kāi)發(fā)
  • Java->Kotlin,可以逐步遷移而不是非黑即白
  • 使用Kotlin開(kāi)發(fā)時(shí)蚜枢,萬(wàn)一遇到問(wèn)題缸逃,可以瞬間切換回Java~

2.5 工具完善

來(lái),我們?cè)倮硪幌逻@個(gè)關(guān)系樹(shù):
JetBrains
|--> Intellij IDEA --> Android Studio
|--> Kotlin
Kotlin是JetBrains公司出的厂抽;JetBrains向來(lái)以做各種牛逼的IDE著稱(chēng)需频;Android的官方開(kāi)發(fā)工具AndroidStudio就是基于JetBrains公司出品的Intellij改造的。
↑ 以上是背景筷凤。
從實(shí)際體驗(yàn)角度來(lái)說(shuō)昭殉,Kotlin的開(kāi)發(fā)也是十分方便快捷的。
只需花幾分鐘給AndroidStudio安裝一個(gè)Kotlin的擴(kuò)展插件藐守,就可以迅速開(kāi)始體驗(yàn)使用Kotlin的快感了挪丢。
一開(kāi)始的時(shí)候,你甚至都不需要會(huì)使用Kotlin卢厂!這是因?yàn)镵otlin插件提供了一個(gè)Java->Kotlin的轉(zhuǎn)換功能吃靠,可以一鍵把現(xiàn)有的Java代碼轉(zhuǎn)換為Kotlin代碼,你可以通過(guò)閱讀它轉(zhuǎn)換后的Kotlin代碼足淆,進(jìn)行學(xué)習(xí)巢块。
(實(shí)際上,我在學(xué)習(xí)Kotlin的時(shí)候巧号,就大量使用了這種方法:當(dāng)我不知道某個(gè)功能用Kotlin怎么寫(xiě)的時(shí)候族奢,就會(huì)先用Java把它寫(xiě)出來(lái),然后使用轉(zhuǎn)換功能丹鸿,生成Kotlin代碼越走,從而就知道了Kotlin的寫(xiě)法)

3. 如何開(kāi)始

因?yàn)槭且黄兇獾恼f(shuō)明文,所以我把如何開(kāi)始單獨(dú)抽離出來(lái)靠欢,寫(xiě)了這篇文章:《只需五分鐘廊敌,開(kāi)始使用Kotlin開(kāi)發(fā)Android》
? 鏈接看這里:
http://www.reibang.com/p/5fa2c1eda64c

其他:

有用的鏈接們:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掷空,一起剝皮案震驚了整個(gè)濱河市肋殴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坦弟,老刑警劉巖护锤,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酿傍,居然都是意外死亡烙懦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)赤炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氯析,“玉大人,你說(shuō)我怎么就攤上這事可霎∑茄唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵癣朗,是天一觀的道長(zhǎng)拾因。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旷余,這世上最難降的妖魔是什么绢记? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮正卧,結(jié)果婚禮上蠢熄,老公的妹妹穿的比我還像新娘。我一直安慰自己炉旷,他們只是感情好签孔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布叉讥。 她就那樣靜靜地躺著,像睡著了一般饥追。 火紅的嫁衣襯著肌膚如雪图仓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天但绕,我揣著相機(jī)與錄音救崔,去河邊找鬼。 笑死捏顺,一個(gè)胖子當(dāng)著我的面吹牛六孵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播幅骄,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼劫窒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昌执?” 一聲冷哼從身側(cè)響起烛亦,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懂拾,沒(méi)想到半個(gè)月后煤禽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岖赋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年檬果,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唐断。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡选脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脸甘,到底是詐尸還是另有隱情恳啥,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布丹诀,位于F島的核電站钝的,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铆遭。R本人自食惡果不足惜硝桩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枚荣。 院中可真熱鬧碗脊,春花似錦、人聲如沸橄妆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至矢劲,卻和暖如春颁虐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卧须。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒陨,地道東北人花嘶。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹦漠,于是被迫代替她去往敵國(guó)和親椭员。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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