Kotlin-for-Android : 讓你的Android程式碼更簡潔
Kotlin簡介
Kotlin是JetBrains創造的基於JVM的語言,JetBrains是IntelliJ的締造團隊。
Kotlin是一個擁有很多函式程式設計特點的物件導向的程式語言。
為什麼要用Kotlin
我首先宣告我並沒有使用Kotlin很長時間,我幾乎是在學習的同時寫了這些文章的。我並沒有嘗試任何其它的替 代語言,例如Go和Scala,所以如果你是真的考慮換一種開發語言的話,我建議你去搜尋一下其他人對這些 語言的評價。
以下是我選擇學習Kotlin的原因:
- 學習曲線相對較快:以Scala作為例子進行比較,我們是向著更簡單的方向前進。Kotlin有更多的限制,但是如果你沒有學習過一門現代程式語言的話,Kotlin更容易學習。
- 輕量級:與其他語言相比Kotlin的核心庫更小。這很重要,因為android函式數量限制(函式數量不能大於64k)是一個問題,雖
然有一些選擇來解決這個問題,例如proguard 或 multidexing,但是這些解決方案會加複雜度,並導
致除錯時花費更多的時間。引入Kotlin核心庫新增了不到7000個方法,大致和support-v4一樣。 - 高互動性:Kotlin和其它java庫協調使用的特別好,並且互動操作很簡單。這是Kotlin團隊
在開發新語言是的主要理念之一。他們想在使用Kotlin開發時並不用重寫之前所有用java寫的程式碼,所以,Kotlin和java互動的能力必須非常高。 - 與AS和Gradle完美結合:我們有一個IDE的外掛和另一個屬於Grade的外掛,因此,用Kotlin進行
android程式設計並不困難。
在開始任何爭論之前我建議你看一下Jake Wharton寫的一個有趣的文件the use of Kotlin for Android development。
Kotlin的優點
1. 可讀性更高,更簡潔
使用Kotlin,可以更容易的避免建立模版型程式碼,因為大多數經典的情景都預設包含在Kotlin中。
例如,在java中,我們想要建立一個典型的data class時需要這樣做:
public class Artist { private long id; private String name; private String url; private String mbid; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMbid() { return mbid; } public void setMbid(String mbid) { this.mbid = mbid; } @Override public String toString() { return "Artist{" + "id=" + id + ", name='" + name + '/'' + ", url='" + url + '/'' + ", mbid='" + mbid + '/'' + '}'; } }
那麼在Kotlin需要多少程式碼呢?僅僅是下面這個簡單的資料類:
data class Artist( var id: Long, var name: String, var url: String, var mbid: String)
2. 空指標安全
當我們用java開發時,我們的大多數程式碼是要進行型別檢查的,如果我們不想出現**unexpected
NullPointerException**的話,我們就要在執行程式碼之前持續的檢查是否有物件為null。Kotlin,和其它語
言一樣,是空指標安全的,因為我們可以通過安全的呼叫操作來準確的宣告一個object可以為null。
我們可以這樣做:
//This won´t compile. Artist can´t be null var notNullArtist: Artist = null //Artist can be null var artist: Artist? = null // Won´t compile, artist could be null and we need to deal with that artist.print() // Will print only if artist != null artist?.print() // Smart cast. We don´t need to use safe call operator if we previously checked nullity if (artist != null) { artist.print() } // Only use it when we are sure it´s not null. Will throw an exception otherwise. artist!!.print() // Use Elvis operator to give an alternative in case the object is null val name = artist?.name ?: "empty"
3. 擴充套件方法
我們可以給任何類新增新方法。這比我們在project中使用的工具類可讀性更高。例如:我們可以給Fragment新增一個新方法來顯示Toast。
fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(getActivity(), message, duration).show() }
我們可以這樣使用:
fragment.toast("Hello world!")
4. 支援函數語言程式設計
如果我們可以不用在我們需要的時候每一次都建立一個listener,就像建立一個click listener那樣的操作,
而是僅僅定義我們想要做什麼?這種想法的確可以實現,它的實現得益於**lambda**d的使用:
view.setOnClickListener({ toast("Hello world!") })
Kotlin目前存在的限制
Kotlin 依舊在發展,雖然它相對穩定,並且final release版本就很快釋出,但是Kotlin在進行android相關開發的時候還是有些限制的。
- 互動性與自動程式碼生成:一些有名的android Libraries,例如Dagger 或 Butterknife,他們依賴於自動
程式碼生成,這種情況下如果有名字衝突的話將無法進行程式碼生成。Kotlin正在解決這個問題,所以這個問題也許
會很快解決。無論如何,我將在接下來的文章裡闡明,Kotlin語言的表達能力會讓我們覺得不再需要那麼多的
Libraries。 - 宣告自定義View比較困難:Kotlin類只能宣告一個建構函式,然而自定義View通常需要三個。如果我
們使用程式碼來建立View的話可以避免這個問題,但對於使用XML檔案來宣告View的話就不能滿足需求了。最容易的變通方式是用java來宣告這些
自定義View的實現類,然後通過Kotlin來使用它們。Kotlin團隊許諾將在M11 release解決這個問題。
Update: Kotlin M11 is out and now includes secondary constructors - android 下Junit測試:AS 1.1中介紹的新特性並不適用與Kotlin。順便說說,系統測試和Junit 測試對於純Kotlin專案是完全可用。
結論
對於android apps 開發,Kotlin是一個非常有趣的java替代者。下一篇文章將會描述如何用Kotlin新建一
個project,和如何更好的適用Kotlin來使得android開發更加簡單。敬請關注!
相關文章
- 【JS】裝飾器讓你的程式碼更簡潔JS
- 讓你的DEVONthink UI 介面更簡潔?devUI
- 使用 Macro 讓你的程式碼更簡潔,更具有可讀性Mac
- Spring Boot 整合 Lombok 讓程式碼更簡潔Spring BootLombok
- 經驗總結 | 重構讓你的程式碼更優美和簡潔
- [翻譯] 讓你的程式碼更簡短,更整潔,更易讀的ES6小技巧
- 通過 Laravel 訊息通知使用 EasySms 簡訊服務,讓你的程式碼更簡潔Laravel
- [翻譯] Async/Await 使你的程式碼更簡潔AI
- 6 個可以讓程式碼變得更整潔的 Android 庫Android
- MultiItem進階 使用DataBinding 讓 RecyclerView程式碼更簡潔清爽View
- 如何讓你的程式碼整潔漂亮
- 如何讓我們的模型更簡潔模型
- Go Interface 的優雅使用,讓程式碼更整潔更容易測試Go
- 11個讓你程式碼整潔的原則
- 極簡Kotlin-For-Android(一)KotlinAndroid
- async/await 是如何讓程式碼更加簡潔的?AI
- 使程式碼更簡潔(二)—-集合轉換相關
- 使用 Laravel Eloquent 構造器讓模型更簡潔Laravel模型
- Web前端:11個讓你程式碼整潔的原則Web前端
- Android & Java 書寫簡潔規範的程式碼AndroidJava
- 分享常用的CSS函式,助你寫出更簡潔的程式碼CSS函式
- 讓你的Python程式碼更乾淨只需簡單一步Python
- 9個JavaScript小技巧:寫出更簡潔,高效程式碼JavaScript
- Bartender 4: 讓你的 Mac 選單欄更整潔更高效Mac
- 瞭解CSS的查詢匹配原理,讓CSS更簡潔、高效CSS
- JavaScript 程式碼簡潔之道JavaScript
- JavaScript程式碼簡潔之道JavaScript
- [譯] 利用 Immutability(不可變性)編寫更為簡潔高效的程式碼
- (譯)保持你的程式碼整潔
- 如何編寫簡潔的程式碼?
- 基礎問題不簡單 | 怎麼合理使用值物件,讓你的程式碼更清晰、更安全?物件
- 幾個簡單的技巧讓你寫出的vue.js程式碼更優雅Vue.js
- Lombok - 使用註解讓你的JavaBean變得更加簡潔LombokJavaBean
- 使用Async,讓你的Node.js程式碼更優雅Node.js
- Java11正式釋出了,讓你的程式碼更完美?Java
- 一些技巧讓你的 Laravel 程式碼更優雅Laravel
- C#6新特性,讓你的程式碼更乾淨C#
- 五個簡單的原則,帶你寫出整潔程式碼