新聞中心
從Android 7.0開(kāi)始,谷歌使用的API從Oracle JDK切換到了open JDK,這對(duì)于谷歌來(lái)說(shuō)是一個(gè)艱難的決定。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),卻倍感興奮,這意味著長(zhǎng)期的官司問(wèn)題也許就此結(jié)束,Android系統(tǒng)開(kāi)發(fā)又可以回歸到一個(gè)正常的軌道,持續(xù)給全球的安卓用戶(hù)帶來(lái)驚喜。

沿灘ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!
Kotlin語(yǔ)言有什么優(yōu)勢(shì)?
Kotlin語(yǔ)言被贊譽(yù)為Android世界里的Swift.
簡(jiǎn)單來(lái)說(shuō),可以這樣概括
- 完全兼容Java
- Null safe
- 支持lambda表達(dá)式(比Java8更好)
- 支持?jǐn)U展
- 體驗(yàn)一致的開(kāi)發(fā)工具鏈
使用Kotlin對(duì)Android開(kāi)發(fā)者意味著什么?
使用Kotlin開(kāi)發(fā),對(duì)于安卓開(kāi)發(fā)來(lái)說(shuō),主要有下面幾個(gè)有利的影響:
- 更少的空指針異常
- 更少的代碼量
- 更快的開(kāi)發(fā)速度
- 更一致的開(kāi)發(fā)體驗(yàn)
What is Kotlin
Kotlin語(yǔ)言是由JetBrains公司開(kāi)發(fā),其初衷用于快速生成JavaScript代碼,而如今Kotlin已經(jīng)支持Android開(kāi)發(fā),并提供了一系列的Android開(kāi)發(fā)插件。由于JetBrains的天然優(yōu)勢(shì)(Android Studio就是在JetBrains公司開(kāi)發(fā)的IDE上面添加了一些插件而成),Android Studio對(duì)Kotlin語(yǔ)言的支持也比較到位。
看一看Kotlin語(yǔ)言給我們帶來(lái)了什么。
Null Safe
空指針異常的確是困擾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ì)有窗戶(hù),也可能沒(méi)有窗戶(hù),如果沒(méi)有窗戶(hù),調(diào)用open方法自然就會(huì)出現(xiàn)空指針異常。Java語(yǔ)言的處理方式是在調(diào)用該方法之前進(jìn)行空值判斷,而Kotlin語(yǔ)言則使用?操作符進(jìn)行控制,意思就是,如果?前面的對(duì)象為空,則直接返回空值,后面的語(yǔ)句不再執(zhí)行。其有一個(gè)專(zhuān)業(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ì)專(zhuān)門(mén)用一個(gè)章節(jié)來(lái)給大家講解,請(qǐng)期待后面我的Kotlin語(yǔ)言系列教程。
Function
在Kotlin語(yǔ)言中,類(lèi)終于不再是一等公民。Kotlin語(yǔ)言開(kāi)始支持面向過(guò)程編程,Kotlin語(yǔ)言中可以聲明全局函數(shù),內(nèi)聯(lián)函數(shù)等,還支持函數(shù)嵌套,使用函數(shù)作為方法參數(shù)等操作。對(duì)于一些簡(jiǎn)單的操作,新建一個(gè)類(lèi)去處理,的確有時(shí)候是一個(gè)讓人頭疼的問(wèn)題,Kotlin語(yǔ)言終于讓我們擺脫了這一尷尬的現(xiàn)狀。
來(lái)看一看函數(shù)聲明的簡(jiǎn)單寫(xiě)法,也和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ù)的寫(xiě)法有較大的不同,Kotlin語(yǔ)法類(lèi)似Swift語(yǔ)言的寫(xiě)法,每個(gè)函數(shù)都必須使用fun關(guān)鍵字聲明,參數(shù)類(lèi)型在后,參數(shù)名稱(chēng)在前,對(duì)于Java語(yǔ)言開(kāi)發(fā)的同學(xué)可以需要一個(gè)短暫的適應(yīng)過(guò)程。
同樣地,我會(huì)在后面的文章中專(zhuān)門(mén)對(duì)Kotlin函數(shù)進(jìn)行講解
Lambdas
閉包應(yīng)該是Java程序員非常期待的一個(gè)特性,而且幸運(yùn)的是,Java8已經(jīng)開(kāi)始支持這一特性。二者非常相似,我們來(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ǔ)法非常類(lèi)似,同樣支持類(lèi)型推導(dǎo),支持簡(jiǎn)寫(xiě);不同的是,由于Java語(yǔ)言完全面向?qū)ο蟮奶匦?,閉包必須與接口一一對(duì)應(yīng),而Kotlin語(yǔ)言由于天然支持函數(shù)編程,可以不用聲明對(duì)應(yīng)接口,直接在參數(shù)中使用即可。
Extension
這是我最喜歡的一個(gè)特性,Kotlin語(yǔ)言支持對(duì)現(xiàn)有的類(lèi)進(jìn)行擴(kuò)展。Java程序員應(yīng)該會(huì)對(duì)這個(gè)特性比較陌生,這也是Swift語(yǔ)言的一個(gè)特性之一。所謂擴(kuò)展,就是在不使用繼承的情況下,對(duì)現(xiàn)有的類(lèi)新增方法,屬性等操作,擴(kuò)展不會(huì)破壞現(xiàn)有的類(lèi)方法,僅僅在使用的時(shí)候進(jìn)行動(dòng)態(tài)添加。應(yīng)該記住一個(gè)原則: 擴(kuò)展優(yōu)于繼承
而這個(gè)特性Java語(yǔ)言并不支持。
Kotlin
- fun MutableList
.swap(index1: Int, index2: Int) { - val tmp = this[index1] // 'this' corresponds to the list
- this[index1] = this[index2]
- this[index2] = tmp
- }
Data Class
在開(kāi)發(fā)過(guò)程中,我們常常要不斷寫(xiě)一些Model類(lèi),不斷地使用開(kāi)發(fā)工具生成set/get方法。Data Class就是為簡(jiǎn)化這個(gè)操作而生的,數(shù)據(jù)類(lèi)會(huì)自動(dòng)生成set/get方法,而不用顯式生成set/get方法,看下面的簡(jiǎn)單用法:
Kotlin
- data class Person(var name: String?,var age: Int?)
僅僅使用這樣一行代碼就完成Model類(lèi)的創(chuàng)建,Kotlin會(huì)自動(dòng)幫我們生成set/get方法,極大地簡(jiǎn)化了Model類(lèi)的編寫(xiě)工作。不過(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 | 支持 | 不支持(需要依賴(lài)框架) |
| 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ǔ)言?xún)?yōu)勢(shì)
有網(wǎng)友統(tǒng)計(jì),使用Kotlin語(yǔ)言大約可以減少30%的代碼編寫(xiě),同時(shí)也不用再擔(dān)心空指針異常,由于JetBrains的天然基因,Kotlin可以獲得較好的維護(hù)、升級(jí)。***,對(duì)于Oracle公司對(duì)Google的頻繁訴訟,這也算是一個(gè)很好的還擊。在Kotlin語(yǔ)言發(fā)布之后,國(guó)外已經(jīng)有很多開(kāi)發(fā)人員推出了大量好用的Kotlin框架,你可以不用重復(fù)創(chuàng)造輪子。同時(shí),Kotlin語(yǔ)言可以和Java語(yǔ)言實(shí)現(xiàn)無(wú)縫連接,你還在等什么呢?
建議
對(duì)于Kotlin語(yǔ)言,大部分開(kāi)發(fā)人員都對(duì)Kotlin語(yǔ)言抱有積極態(tài)度。我本人也非常推崇Kotlin語(yǔ)言,如果你熟悉類(lèi)似Python,Ruby等腳本語(yǔ)言,亦或者熟悉Swift語(yǔ)言,Kotlin語(yǔ)言將是你不二的選擇。而如果你已經(jīng)厭倦了Java語(yǔ)言冗余繁雜的寫(xiě)法,Kotlin語(yǔ)言也非常值得一試,相信你也會(huì)像我一樣愛(ài)上這門(mén)語(yǔ)言。
本文標(biāo)題:與Java無(wú)縫兼容,Kotlin語(yǔ)言的優(yōu)缺點(diǎn)及建議
分享網(wǎng)址:http://m.fisionsoft.com.cn/article/cdesgoh.html


咨詢(xún)
建站咨詢(xún)
