Kotlin語言極簡介紹

程式設計師詩人發表於2017-09-20

Kotlin具備現代(也有稱下一代的)靜態程式語言的很多特點,如:

型別推斷、多正規化(OOP,FP)支援、可空性表達、擴充套件函式、DSL 支援等。
另外對於安卓開發還提供了 Kotlin 安卓擴充套件和 諸多庫,如Anko 等。

還有,KotlinJS,KotlinNative。

當然,事物都是具備兩面性的。Kotlin也有缺點。
雖然,官方說100%與 Java 互操作,但是在 Java 呼叫 Kotlin 的時候還是存在一些不方便的地方,有少部分地方顯得“不夠簡潔、優雅”。
但是,瑕不掩瑜。

特性:

開發效率和簡潔性
空安全(型別系統編譯時檢查null)
擴充套件函式/屬性(Extension Functions/Properties)、委託(Delegate)
DSL 支援
集合類中豐富的函式式API、泛型等
多正規化程式設計支援(一等OOP: 介面抽象類繼承多型等等,一等FP: 高階函式和Lambda表示式 )
協程(Coroutines)

    1. 比Java簡潔。

Java的好處是語法工整,清晰直接,嚴格;但是它的問題也很明顯:“verbosity”,中文通俗翻譯就是 “羅裡吧嗦,煩死了”。經常是 Python 或者 Ruby 10行完成的邏輯或者data class,用 Java 可以輕鬆輕鬆寫出三倍多的程式碼。大部分Java程式設計師對此表示很無語,小數程式設計師可能還會陷入一種自我催眠狀態,覺得自己程式碼的多,於是碼的爽,於是沾沾自喜於每天可以寫500或者上千行程式碼的自我感動中。

而 Kotlin 和 iOS 上的 swift 的出現,可以有效地節約我們程式設計師不少的時間,讓寫程式碼更為有效率。Kotlin 不僅僅是“A Better Java ”)。

相容Java強大的生態的同時給Java注入年輕、靈活、高糖的語法;Kotlin的出現填掉了Java開發經常遇到的坑,而且相容性很好,難度適中還適合Java開發人員切換。

    1. 空安全(Null Safety)。Kotlin 的顯式optional加鏈式呼叫:val name = post?.author?.friends?.get (0)?.name : “none”,相比一長串 if-else 是簡潔了許多。

Kotlin的一大亮點就是語法層面強制Nullable,這點從實際工程角度來說還是非常有利的。雖然Scala可以用Option。Kotlin這個地方設計很高糖,寫起來很舒服,並沒有Scala的Option、Java的Optional的不適感。所以Kotlin從語法層面和便捷層面設計的Nullable還是要給一個大大的讚的。

另外 Java 還有最大的一個問題,在Null的處理上一直是其阿基里斯之踵(https://www.apteligent.com/technical-resource/top-5-crashes-on-android/)。 不僅僅在Android的Crash中,而且在服務端開發中NPE也普遍存在,就跟當年的C/C++的指標、記憶體洩漏一樣讓人們頭疼。

在 Android top crashes 的排名上:第一 NPE(NullPointerException),第二 OOM(OutOfMemoryException,特別對於低端手機而言);Java 最近的改進也是在 annotation 上增加對於 null 的規範和檢查。而 Kotlin 則是徹底規範了對於變數在 null 上檢查和支援 “?:” 來簡潔地處理 null。比如:

if (nullable != null) nullable.doSomething() // Java
nullable?.doSomething() // Kotlin

https://fabiomsr.github.io/from-java-to-kotlin/

    1. 比Groovy安全、更具工程實踐性
    1. 比Scala簡單、更具工程實踐性。

Kotlin是一個經過精挑細選,篩掉了部分功能的Scala。也可以說是一個填了無數大坑,經過精心強化版的Java。從設計角度來說,Scala雖然頂著多正規化程式設計的大旗,但是無疑她就是一門非常偏FP的語言,如果是把她當成換了語法的Java來寫,那肯定會寫出風格詭異,可讀性很差的程式碼來。而Scala還有Kotlin不具備的強大的型別系統、強大的模式匹配、任意方法名來代替有限的運算子過載等功能,以及還有一個迭代多年、精心設計過的強大類庫;這些都是Scala比Kotlin功能更加強大的證明。

當然Scala的強大直接帶來的一點就是複雜度爆炸,學習曲線陡峭,如果沒有經過長期的實踐和理論學習,恐怕Scala肯定會寫成一個“換了語法的Java出來”,而且這樣寫你絕對不會覺得比Java好用。

另外Scala非常致命的一個缺陷就是相容性實在不敢恭維,一個壽命有十多年的語言,而且還是執行在JVM上的語言居然到現在都有大版本升級二進位制互相不相容的問題,使用第三方庫還要考慮下對方是什麼版本的?支不支援我的版本?這個版本在目前這個專案能不能用?拿原始碼升級的話我能不能跨版本編譯過去等蛋疼的問題。而這個相容性從另一個角度看,個人認為Scala編譯器編譯出來的位元組碼完全就只是為了能執行在JVM上,然後順便考慮了下與Java的互動。

PS: 就不要再用Kotlin和Scala互動了。

Kotlin沒有Scala那麼“高冷”,難度上是可以適合絕大多數開發人員的,加上和Java的相容性很好,又被Google欽點,未來Kotlin必將與兄弟Java共同作為JVM上的主流語言,而且是成長潛力巨大的語言。

與Groovy、Scala或Clojure等“同門師兄弟”相比較而言,Kotlin是有諸多外部條件(JetBrains,IDEA,Android Studio,Spring 5, Gradle ,Google Android 等)優勢跟語言內在優秀特性(如上所述等)的。

    1. 與Java 100% 互操作。

Kotlin新增了大量函式式風格,它的map、filter等等操作比Java 8 Stream的來得簡潔直接。另外,涉及到集合類、反射、多執行緒、IO等操作時,Kotlin則直接使用了Java的特性,並在Java的基礎上做了易用的擴充套件。這點跟Groovy一脈相承。



KotlinChina程式設計社群 微博

《Kotlin極簡教程》正式上架:

點選這裡 > 去京東商城購買閱讀

點選這裡 > 去天貓商城購買閱讀

非常感謝您親愛的讀者,大家請多支援!!!有任何問題,歡迎隨時與我交流~



相關文章