作者簡歷目前任職於凌群電腦軟體事業群,參與多項警政機關的專案系統開發與維護,專案主要使用語言為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++的官方支援,而是並行使用。
Kotlin特性及運用Kotlin是一個運行在Java Virtual Machine的靜態型別程式語言,它也可以編譯成為JavaScript的原始碼,但若需編譯為JavaScript的原始碼就必須使用Kotlin原生的語法以及套件才支援此項功能,下方是一個簡單的將Kotlin程式(圖2)編譯成JavaScript的範例(圖3),因為本文著重在Kotlin在Android上的運用,所以後續都會以運行在Java Virtual Machine的Kotlin來介紹這套程式語言的特性:

《圖二》Kotlin程式碼編譯前

《圖三》Kotlin編譯成JavaScript結果
一、可以完全相容並且使用JavaKotlin可以使用目前在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
七、複寫必須使用overrideJava中對於@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 中的新功能