
Kotlin概述
Kotlin是一種在Java虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語(yǔ)言。它主要是JetBrains開發(fā)團(tuán)隊(duì)所開發(fā)出來(lái)的編程語(yǔ)言。雖然Kotlin與Java語(yǔ)法并不兼容,但Kotlin被設(shè)計(jì)成可以和Java代碼相互運(yùn)作,并可以重復(fù)使用如Java集合框架等現(xiàn)有Java引用的方法庫(kù)。它很容易在Android項(xiàng)目中替代Java或者同Java一起使用。
Google在2019年的Google I/O大會(huì)上宣布Kotlin被選為Android開發(fā)首選語(yǔ)言。
Kotlin的特點(diǎn)很多:
- 簡(jiǎn)潔易用: Kotlin中提供了大量的擴(kuò)展,使得我們的代碼更加簡(jiǎn)潔,開發(fā)出來(lái)的框架更加易用
- 安全: 避免空指針異常等整個(gè)類的錯(cuò)誤
- 互操作性: 充分利用 JVM、Android 和瀏覽器的現(xiàn)有庫(kù)
- 工具友好: 可用任何 Java IDE 或者使用命令行構(gòu)建
學(xué)習(xí)Kotlin對(duì)架構(gòu)師的意義Kotlin
那現(xiàn)在該不該學(xué)習(xí)Kotlin呢?以及學(xué)習(xí)Kotlin對(duì)架構(gòu)師來(lái)說(shuō)會(huì)有那些意義呢?
- 學(xué)習(xí)正當(dāng)時(shí):目前Kotlin已經(jīng)成為Android開發(fā)的官方首選語(yǔ)言,現(xiàn)在學(xué)習(xí)Kotlin是正當(dāng)時(shí);
- 順應(yīng)潮流,為了未來(lái):現(xiàn)在包括一二線在內(nèi)的各大互聯(lián)網(wǎng)公司都在往Kotlin上轉(zhuǎn),現(xiàn)在學(xué)習(xí)Kotlin不僅是順應(yīng)潮流,更是為了為了未來(lái)著想;
- 提升開發(fā)效率:在開發(fā)效率上Kotlin開發(fā)要比Java高很多;
- 帶領(lǐng)團(tuán)隊(duì)進(jìn)行技術(shù)革新:提升團(tuán)隊(duì)的對(duì)前沿技術(shù)的追求與提升團(tuán)隊(duì)技術(shù)氛圍,滿足小伙伴對(duì)(錢、成長(zhǎng)、平臺(tái))中成長(zhǎng)的追求;
Kotlin設(shè)計(jì)理念
上圖是來(lái)在于Kotlin語(yǔ)言設(shè)計(jì)團(tuán)隊(duì)的老大Andrey Breslav在2018年KotlinConf的會(huì)議上的演講,里面包含了他對(duì)Kotlin設(shè)計(jì)上的一些理念的介紹,感興趣的同學(xué)可以在油管上搜一下這個(gè)視頻的完整版。
在KotlinConf 2018大會(huì)上Andrey Breslav表示了Kotlin并沒(méi)有獨(dú)創(chuàng)一些當(dāng)前沒(méi)有或大眾不太熟悉的設(shè)計(jì)理念,而是吸收了眾多其他語(yǔ)言的精髓,并且提供強(qiáng)大的IDE支持,能真正方便開發(fā)者運(yùn)用到實(shí)際項(xiàng)目之中。
- 不僅簡(jiǎn)潔而且可讀性強(qiáng):主要指的是Kotlin支持隱藏例如getter、setter等Java模板代碼,并且有大量的標(biāo)準(zhǔn)庫(kù)以及靈活的重載和擴(kuò)展機(jī)制,來(lái)使代碼變得更加直觀;
上圖是在設(shè)置控件點(diǎn)擊事件時(shí)分別用Java和Kotlin實(shí)現(xiàn)的對(duì)比,可以看出Kotlin實(shí)現(xiàn)省去了一些模板代碼,不僅看起來(lái)簡(jiǎn)潔而且能讓開發(fā)者專注于具體邏輯的實(shí)現(xiàn),可讀性更強(qiáng)。
不僅富有表現(xiàn)力而且可復(fù)用性更強(qiáng):Kotlin將一些常用的功能比如:Android的一些擴(kuò)展等封裝成庫(kù),以方便開發(fā)者使用,在復(fù)用性方面它比Java有過(guò)之而不及;
對(duì)互通性的追求要大于獨(dú)創(chuàng)性:為什么這么說(shuō)呢,在Kotlin發(fā)展的初期,很多人會(huì)覺得Kotlin無(wú)非就是從其它語(yǔ)言copy過(guò)來(lái)的,之說(shuō)以這么覺得是因?yàn)槟憧聪窀唠A函數(shù),閉包,擴(kuò)展,Lambda表達(dá)式等都不是Kotlin首創(chuàng)的,都是從現(xiàn)有的語(yǔ)言中
借鑒過(guò)來(lái)的;Kotlin的設(shè)計(jì)者的理念是不追求獨(dú)創(chuàng)性,而是追求更好的互通性,Kotlin要想超越Java必須要實(shí)現(xiàn)和Java的互通(互操作性),而不是另起爐灶。強(qiáng)大的工具支撐以NPE保護(hù)使健全性更強(qiáng):大家都知道Kotlin是JetBrains的團(tuán)隊(duì)開發(fā)的,而JetBrains也是大名鼎鼎的IntelliJ IDEA的作者,而我們開發(fā)Android 所以的AS也是Google和而JetBrains合作的產(chǎn)物,可以說(shuō)在工具方面AS 為Kotlin開發(fā)Android提供了包括編譯器檢查等強(qiáng)大的支持。
Kotlin構(gòu)建流程
上圖是Kotlin和Java的構(gòu)建流程對(duì)比:
- *kt會(huì)被Kotlin編譯器編程編譯成.class的字節(jié)碼文件,然后被歸檔成.jar,最后呢由各平臺(tái)打包工具輸出最終的原因程序
- 上圖不難理解*kt最終會(huì)被編譯成Java的字節(jié)碼文件,那為什么在最后一步還需要一個(gè)Kotlin運(yùn)行時(shí)呢?想必很多小伙伴對(duì)這塊肯定會(huì)有所疑惑
- 這是因?yàn)?,我們用Java來(lái)寫的程序所有的實(shí)現(xiàn)都會(huì)有標(biāo)準(zhǔn)的Java類庫(kù)來(lái)做支撐,比如:
java.lang.*,java.util.*,但Kotlin中的類庫(kù)是不在標(biāo)準(zhǔn)的Java類庫(kù)中的,所以,Kotlin應(yīng)用程序需要在最后一步借助Kotlin運(yùn)行時(shí)來(lái)支撐這些Java標(biāo)準(zhǔn)類庫(kù)沒(méi)有的實(shí)現(xiàn)。
- 這是因?yàn)?,我們用Java來(lái)寫的程序所有的實(shí)現(xiàn)都會(huì)有標(biāo)準(zhǔn)的Java類庫(kù)來(lái)做支撐,比如:
該如何有效的學(xué)習(xí)
- 首先過(guò)一遍上述的
Kotlin與Java的異同對(duì)Kotlin中差異的部分有個(gè)印象 - 跟著本課程的Kotlin講解學(xué)習(xí)一篇
- 善用工具(
君子生非異也,善假于物也)- 官方文檔:https://kotlinlang.org/docs/reference/
- 終極工具:善用AS的
convert java file to kotlin file工具 - 懂你的Google
終極工具(Practice)
如果你遇到一些代碼不知道該如何用Kotlin來(lái)實(shí)現(xiàn)的時(shí)候,不妨試試下面的工具:
public interface BrightnessListener {
String[] onViewBrightness(String... args);
}
通過(guò)如下步驟將上述Java文件轉(zhuǎn)成Kotlin:
-
AS->Code->convert java file to kotlin file
或者將上述代碼復(fù)制到kotlin文件中利用AS的自動(dòng)轉(zhuǎn)換功能進(jìn)行轉(zhuǎn)換:
interface BrightnessListener {
fun onViewBrightness(vararg args: String?): Array<String?>?
}
Kotlin可以理解為Java的語(yǔ)法糖,我們可以借助AS提供的工具來(lái)查看我們Kotlin代碼的Java 模樣,也就是說(shuō)IDE 會(huì)將我們的Kotlin代碼轉(zhuǎn)成怎樣的Java代碼:
-
AS->Tools->Kotlin->Show kotln Bytecode


