第251期 / September 5, 2018

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

Kotlin:新一代Android APP開發語言

作者/李揚德

[發表日期:2018/9/5]

作者簡歷

目前任職於凌群電腦軟體事業群,參與多項警政機關的專案系統開發與維護,專案主要使用語言為Java、C#,並且使用Sybase、SQL Server等資料庫系統,專案的開發項目包含有網頁系統、Web Service及Android App,主要專長為Android APP、Java、Asp .net C#系統開發。

前言

Google在2017年的Google I/O大會上宣布將Kotlin列為Android APP開發的官方一級開發語言,並於2018年的Google I/O大會上提到,過去一年已有35%的Android開發者在使用Kotlin,並且其中95%的開發者對於Kotlin感到滿意。

Kotlin是一款由俄羅斯聖彼得堡的JetBrains開發團隊所發展出來的程式語言,它的命名是源自於聖彼得堡附近的科特林島,Kotlin於Android Studio整合式開發環境的3.0版本開始支援用其作為APP開發的語言,Kotlin支援原先由Java開發出來的套件外,也擁有Java所不支援的功能。Google認為使用Kotlin開發Android APP可以更為敏捷,但他們有補充此舉並非要取代過去JAVA和C++的官方支援,而是並行使用。


《圖一》Android Kolint
資料來源:https://developer.android.com/kotlin/


Kotlin特性及運用

Kotlin是一個運行在Java Virtual Machine的靜態型別程式語言,它也可以編譯成為JavaScript的原始碼,但若需編譯為JavaScript的原始碼就必須使用Kotlin原生的語法以及套件才支援此項功能,下方是一個簡單的將Kotlin程式(圖2)編譯成JavaScript的範例(圖3),因為本文著重在Kotlin在Android上的運用,所以後續都會以運行在Java Virtual Machine的Kotlin來介紹這套程式語言的特性:


《圖二》Kotlin程式碼編譯前



《圖三》Kotlin編譯成JavaScript結果


一、可以完全相容並且使用Java

Kotlin可以使用目前在Java的程式,並且也可以在Java中使用Kotlin所開發的套件,(圖4)就是一個Kotlin使用Java的範例。在這個狀況下,Kotlin更方便原先使用Java開發者轉換,並且也擁有更多的函式庫。


《圖四》Kotlin使用Java


二、程式碼簡潔,使用更少的程式碼即可做到原先Java做到的事情

這裡會從幾個面向來說明Kotlin程式碼簡潔的原因:
  • 物件類:

    過去我們在JAVA宣告一個物件的時候往往會寫大量的getter和setter,但在Kotlin中會自動建立所需的gettter、setter和toString,所以可以減少這些程式碼的數量,另外我們也可以自己去定義功能,去複寫這些函數,下面我們實作一個Person的物件,我們可以清楚看出Kotlin程式碼與Java的差異。


    《圖五》使用JAVA撰寫Person物件



    《圖六》使用Kotlin撰寫Person物件


  • 在Kotlin中,迴圈的表達也比過去在使用Java開發時精簡許多,以下圖為例,我們以同樣的for迴圈的條件來比較兩個的程式碼,我們會發現Kotlin精簡了許多。


    《圖七》比較Kotlin和Java for迴圈程式碼


  • 在Java 8 中才支援的Lambda語法,在Kotlin中也有支援,我們也可以比較一下兩者的精簡程度,我們以Android App的按鈕點擊監聽為例:


    《圖八》Android Java按鈕點擊監聽(非Lambda語法)



    《圖九》Android Java按鈕點擊監聽(Lambda語法)



    《圖十》Android Kotlin按鈕點擊監聽(Lambda語法)

三、Kotlin具備自己判斷變數型態以及自動轉型的功能,以下面程式碼為例,我們沒有宣告變數x和y的屬性,但在Kotlin依然可以做計算並且將結果列印出來。


《圖十一》Kotlin變數宣告及轉換


四、安全性

NullPointException在Java中是一個常見的狀況,卻也是一個具有危險的問題,所以我們常常在以Java開發時需要使用各種方法去判斷處理是否為Null去避免NullPointException的發生,然而在Kotlin中,就提出了一個NULL的安全方法,就是每個變數預設是不得為Null,舉例來說,在Kotlin中以圖十二的方式宣告變數,此變數便不得為Null,在編譯結果會顯示error: null can not be a value of a non-null type String,但以圖十三的方式宣告,就可以為Null。


《圖十二》變數x不得為Null



《圖十三》變數x可為Null


Kotlin在當變數允許為Null時,在編譯時將不允許在未經檢查的狀況下引用 它,以下面圖十四、圖十五為例,圖十四編譯時,編譯器會提示錯誤訊息『error: only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Person?』,圖十五則正確。


《圖十四》未檢查是否為空值錯誤



《圖十五》有檢查是否為空值


五、預設不可繼承類別

在Kotlin中,每個物件預設是不可繼承的,必須透過open來宣告物件才可繼承,使用方法如圖十六。


《圖十六》宣告可繼承的物件


六、Singleton

在開發Android App中Singleton時常被使用到,但過去在使用Java開發時我們必須自己去建立這個物件,不過在Kotlin中就有提供預設的
Singleton物件,只需透過object關鍵字即可建立。


《圖十七》Kotlin Singleton


七、複寫必須使用override

Java中對於@Override不是強制的,所以這可能會分不清哪些是override的方法,但在Kotlin中,複寫的方法一定要加上override,否則在編譯時會報錯。


《圖十八》Kotlin override 方法


結論

Kotlin在2017的Google I/O大會上被Google列為Android的開發語言後,在2018年Google I/O大會上發布了Android Jetpack,這是下一代的Android套件,目標是與Kotlin搭配運行,提高開發者的開發效率。Google非常積極的在發展Kotlin的開發,而這個語言的特性讓原本的使用Java的開發者非常容易轉換,並且藉由Kotlin與Java的相容性讓過去開發出來的套件可以轉移過來使用,這點省去了很多轉換開發語言的成本。Kotlin相較於JAVA還處於發展階段,還有很多的成長空間,這是Android APP 開發者一個值得持續關注議題。

參考文獻

1.Java 之外的選擇,Google 宣布 Kotlin 成為 Android 官方開發語言

2.Kotlin使用率達35%,Java要退位了?

3.Kotlin特性與優點分析

4.談談Kotlin特性在開發中的應用

5.Google I/O 2018:Android 中的新功能