設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 621|回復: 0
打印 上一主題 下一主題

Kotlin 的優缺點

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2019-12-9 06:26:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
從Android 7.0開始,谷歌使用的API從Oracle JDK切換到了open JDK,這對於谷歌來說是一個艱難的決定。對於開發者來說,卻倍感興奮,這意味著長期的官司問題也許就此結束,Android系統開發又可以回歸到一個正常的軌道,持續給全球的安卓用戶帶來驚喜。
Kotlin語言有什麽優勢?
Kotlin語言被贊譽為Android世界裏的Swift.
簡單來說,可以這樣概括:
  • 完全兼容Java
  • Null safe
  • 支持lambda表達式(比Java8更好)
  • 支持擴展
  • 體驗一致的開發工具鏈
使用Kotlin對Android開發者意味著什麽?
使用Kotlin開發,對於安卓開發來說,主要有下面幾個有利的影響:
  • 更少的空指針異常
  • 更少的代碼量
  • 更快的開發速度
  • 更一致的開發體驗
What is Kotlin
Kotlin語言是由JetBrains公司開發,其初衷用於快速生成JavaScript代碼,而如今Kotlin已經支持Android開發,並提供了一系列的Android開發插件。由於JetBrains的天然優勢(Android Studio就是在JetBrains公司開發的IDE上面添加了一些插件而成),Android Studio對Kotlin語言的支持也比較到位。

看一看Kotlin語言給我們帶來了什麽。
Null Safe
我曾經在文章從Swift看Java8中說過這個問題,空指針異常的確是困擾Java程序員很多年的問題,Swift語言巧妙地解決了這個問題,Kotlin采用了一樣的解決方案,只是語法形式不太一樣。
我們來和Java語言做一個簡單的對比:
JavaRoom room = ...;if(null != room && null != room.window) {     room.window.open();}Kotlinval room: Room? = ...room?.window?.open()
從常識來說,我們知道,一個房間可能會有窗戶,也可能沒有窗戶,如果沒有窗戶,調用open方法自然就會出現空指針異常。Java語言的處理方式是在調用該方法之前進行空值判斷,而Kotlin語言則使用?操作符進行控制,意思就是,如果?前面的對象為空,則直接返回空值,後面的語句不再執行。其有一個專業叫法: Optinal Value (可選值)
相對於Java語言,Kotlin語言的處理方式簡單了許多,更重要的是:媽媽再也不用擔心我的程序出現空指針異常了 -_-
細心的讀者應該可以發現,Kotlin語言將分號也去掉了,這和Swift語言的處理方式也是一致的。
關於Optional Value的具體用法,後面我會專門用一個章節來給大家講解,請期待後面我的Kotlin語言系列教程。
Function
在Kotlin語言中,類終於不再是一等公民。Kotlin語言開始支持面向過程編程,Kotlin語言中可以聲明全局函數,內聯函數等,還支持函數嵌套,使用函數作為方法參數等操作。對於一些簡單的操作,新建一個類去處理,的確有時候是一個讓人頭疼的問題,Kotlin語言終於讓我們擺脫了這一尷尬的現狀。
來看一看函數聲明的簡單寫法,也和Java語言做一個簡單的對比
Javapublic Sting sayHello(String name) {   return "Hello, " + name;}Kotlinfun String sayHello(name: String?): String {   return "Hello, $name"}
函數的寫法有較大的不同,Kotlin語法類似Swift語言的寫法,每個函數都必須使用fun關鍵字聲明,參數類型在後,參數名稱在前,對於Java語言開發的同學可以需要一個短暫的適應過程。
同樣地,我會在後面的文章中專門對Kotlin函數進行講解
Lambdas
閉包應該是Java程序員非常期待的一個特性,而且幸運的是,Java8已經開始支持這一特性。二者非常相似,我們來和Java8的閉包做一個簡單的對比
Java8interface Sum {    int add(int x,int y);}Sum sum = (x,y) -> x + yKotlinval sum: (Int,Int) -> Int = { x,y -> x + y }
可以看到,二者的語法非常類似,同樣支持類型推導,支持簡寫;不同的是,由於Java語言完全面向對象的特性,閉包必須與接口一一對應,而Kotlin語言由於天然支持函數編程,可以不用聲明對應接口,直接在參數中使用即可。
Extension
這是我最喜歡的一個特性,Kotlin語言支持對現有的類進行擴展。Java程序員應該會對這個特性比較陌生,這也是Swift語言的一個特性之一。所謂擴展,就是在不使用繼承的情況下,對現有的類新增方法,屬性等操作,擴展不會破壞現有的類方法,僅僅在使用的時候進行動態添加。應該記住一個原則: 擴展優於繼承
而這個特性Java語言並不支持。
Kotlinfun 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
在開發過程中,我們常常要不斷寫一些Model類,不斷地使用開發工具生成set/get方法。Data Class就是為簡化這個操作而生的,數據類會自動生成set/get方法,而不用顯式生成set/get方法,看下面的簡單用法:
Kotlindata class Person(var name: String?,var age: Int?)
僅僅使用這樣一行代碼就完成Model類的創建,Kotlin會自動幫我們生成set/get方法,極大地簡化了Model類的編寫工作。不過,Java程序員也不用太羨慕,很多Java框架也可以實現這一點,比如Google推出的Auto Value框架等等
Operator Overloading
這個特性在Swift語言中也存在,在C++語言中也存在。這個特性是一把雙刃劍,使用操作符重載可以簡化使用,也會損失一些代碼可讀性。所以,在使用操作符重載的時候,請慎重考慮。
關於Kotlin語言的特性一時半會也說不完,下面我們就一些比較重要的特性和Java語言做一個簡單的對比:

語言特性
Kotlin
Java
Null Safe
支持
Java8支持
全局函數
支持
不支持
Lambdas
支持
Java8支持
Extension
支持
不支持
Data Class
支持
不支持(需要依賴框架)
Operator Overloading
支持
不支持
Java語言完全互通
你可能會擔心使用Kotlin語言之後,之前的Java代碼怎麽辦。這個擔心是完全多余的,JetBrains保證Kotlin和Java語言可以實現完全地互相調用,Kotlin最終也會編譯成Java字節碼。
Kotlin語言優勢
有網友統計,使用Kotlin語言大約可以減少30%的代碼編寫,同時也不用再擔心空指針異常,由於JetBrains的天然基因,Kotlin可以獲得較好的維護、升級。最後,對於Oracle公司對Google的頻繁訴訟,這也算是一個很好的還擊。在Kotlin語言發布之後,國外已經有很多開發人員推出了大量好用的Kotlin框架,你可以不用重復創造輪子。同時,Kotlin語言可以和Java語言實現無縫連接,你還在等什麽呢?
建議
對於Kotlin語言,有人在知乎上提問如何評價Kotlin語言?,大部分開發人員都對Kotlin語言抱有積極態度。我本人也非常推崇Kotlin語言,如果你熟悉類似Python,Ruby等腳本語言,亦或者熟悉Swift語言,Kotlin語言將是你不二的選擇。而如果你已經厭倦了Java語言冗余繁雜的寫法,Kotlin語言也非常值得一試,相信你也會像我一樣愛上這門語言。



Kotlin 的陷阱以及如何避免 --坑

http://www.infoq.com/cn/news/2017/10/Kotlin-Trap-avoidance#


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-4-29 21:10 , Processed in 0.252015 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表