kotlin-for-android簡介 (讓你的Android代碼更簡潔),kotlinandroid

來源:互聯網
上載者:User

kotlin-for-android簡介 (讓你的Android代碼更簡潔),kotlinandroid

  • 原文連結 : Kotlin for Android (I): Introduction
  • 譯者 : canglangwenyue
  • 校對者: Mr.Simple
  • 狀態 : 完成

Kotlin是眾多基於JVM的語言之一,它一開始是作為android 開發中java語言的可能的代替者出現的。java是世界上使用最多的語言之一,而伴隨著其他語言的發展使得程式員編程越來越容易,但是java並沒有儘快地向預期目標發展。

Kotlin簡介

Kotlin是JetBrains創造的基於JVM的語言,JetBrains是IntelliJ的締造團隊。
Kotlin是一個擁有很多函數編程特點的物件導向的程式設計語言。

為什麼要用Kotlin

我首先聲明我並沒有使用Kotlin很長時間,我幾乎是在學習的同時寫了這些文章的。我並沒有嘗試任何其它的替 代語言,例如Go和Scala,所以如果你是真的考慮換一種開發語言的話,我建議你去搜尋一下其他人對這些 語言的評價。一個使用Scala開發android的例子可以在[47deg Github site](http:/
47deg.github.io/translate-bubble-android/)找到。

以下是我選擇學習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. null 指標安全

當我們用java開發時,我們的大多數代碼是要進行類型檢查的,如果我們不想出現**unexpected
NullPointerException**的話,我們就要在運行代碼之前持續的檢查是否有對象為null。Kotlin,和其它語
言一樣,是null 指標安全的,因為我們可以通過安全的叫用作業來準確的聲明一個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開發更加簡單。敬請關注!

本文來自https://github.com/bboyfeiyu/android-tech-frontier,歡迎star 、fork。
Android開發技術前線,翻譯國外Android優質的技術文章,請關注訂閱號.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.