在使用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
其他:
有用的鏈接們:
- Kotlin官網(wǎng) Kotlin官網(wǎng):中文
-
Kotlin in Chinese
中文翻譯的Kotlin官方文檔 by @huanglizhuo。
另一個(gè)地址门怪,訪問(wèn)速度會(huì)略快一些骡澈。 - 中文版:Kotlin for Android Developers
- 厚臉皮放一個(gè)自己的Kotlin項(xiàng)目
- 如何評(píng)價(jià) Kotlin 語(yǔ)言?——知乎
- Android開(kāi)發(fā)必備知識(shí):為什么說(shuō)Kotlin值得一試