Kotlin語言的優缺點簡介及提出的一點建議

從Android 7.0開始,谷歌使用的API從Oracle JDK切換到了open JDK,這對於谷歌來講是一個艱難的決定。對於開發者來講,卻倍感興奮,這意味着長期的官司問題也許就此結束,Android系統開發又能夠迴歸到一個正常的軌道,持續給全球的安卓用戶帶來驚喜。html

Kotlin語言的優缺點簡介及提出的一點建議Kotlin語言的優缺點簡介及提出的一點建議

Kotlin語言有什麼優點?linux

Kotlin語言被讚譽爲Android世界裏的Swift.程序員

簡單來講,能夠這樣歸納:編程

  • 徹底兼容Java
  • Null safe
  • 支持lambda表達式(比Java8更好)
  • 支持擴展
  • 體驗一致的開發工具鏈

使用Kotlin對Android開發者意味着什麼?閉包

使用Kotlin開發,對於安卓開發來講,主要有下面幾個有利的影響:框架

  • 更少的空指針異常
  • 更少的代碼量
  • 更快的開發速度
  • 更一致的開發體驗

What is Kotlin函數

Kotlin語言是由JetBrains公司開發,其初衷用於快速生成JavaScript代碼,而現在Kotlin已經支持Android開發,並提供了一系列的Android開發插件。因爲JetBrains的自然優點(Android Studio就是在JetBrains公司開發的IDE上面添加了一些插件而成),Android Studio對Kotlin語言的支持也比較到位。
看一看Kotlin語言給咱們帶來了什麼。工具

Null Safe開發工具

空指針異常的確是困擾Java程序員不少年的問題,Swift語言巧妙地解決了這個問題,Kotlin採用了同樣的解決方案,只是語法形式不太同樣。
咱們來和Java語言作一個簡單的對比:this

Java

Room room = ...;
if(null != room && null != room.window) {
     room.window.open();
}

Kotlin

val room: Room? = ...
room?.window?.open()

從常識來講,咱們知道,一個房間可能會有窗戶,也可能沒有窗戶,若是沒有窗戶,調用open方法天然就會出現空指針異常。Java語言的處理方式是在調用該方法以前進行空值判斷,而Kotlin語言則使用?操做符進行控制,意思就是,若是?前面的對象爲空,則直接返回空值,後面的語句再也不執行。其有一個專業叫法: Optinal Value (可選值).
相對於Java語言,Kotlin語言的處理方式簡單了許多,更重要的是:媽媽不再用擔憂個人程序出現空指針異常了 -_-

細心的讀者應該能夠發現,Kotlin語言將分號也去掉了,這和Swift語言的處理方式也是一致的。

關於Optional Value的具體用法,後面我會專門用一個章節來給你們講解,請期待後面個人Kotlin語言系列教程。

Function

在Kotlin語言中,類終於再也不是一等公民。Kotlin語言開始支持面向過程編程,Kotlin語言中能夠聲明全局函數,內聯函數等,還支持函數嵌套,使用函數做爲方法參數等操做。對於一些簡單的操做,新建一個類去處理,的確有時候是一個讓人頭疼的問題,Kotlin語言終於讓咱們擺脫了這一尷尬的現狀。

來看一看函數聲明的簡單寫法,也和Java語言作一個簡單的對比

Java

public Sting sayHello(String name) {
   return "Hello, " + name;
}

Kotlin

fun String sayHello(name: String?): String {
   return "Hello, $name"
}

函數的寫法有較大的不一樣,Kotlin語法相似Swift語言的寫法,每一個函數都必須使用fun關鍵字聲明,參數類型在後,參數名稱在前,對於Java語言開發的同窗能夠須要一個短暫的適應過程。

一樣地,我會在後面的文章中專門對Kotlin函數進行講解

Lambdas

閉包應該是Java程序員很是期待的一個特性,並且幸運的是,Java8已經開始支持這一特性。兩者很是類似,咱們來和Java8的閉包作一個簡單的對比

Java8

interface Sum {
    int add(int x,int y);
}

Sum sum = (x,y) -> x + y

Kotlin

val sum: (Int,Int) -> Int = { x,y -> x + y }

能夠看到,兩者的語法很是相似,一樣支持類型推導,支持簡寫;不一樣的是,因爲Java語言徹底面向對象的特性,閉包必須與接口一一對應,而Kotlin語言因爲自然支持函數編程,能夠不用聲明對應接口,直接在參數中使用便可。

Extension

這是我最喜歡的一個特性,Kotlin語言支持對現有的類進行擴展。Java程序員應該會對這個特性比較陌生,這也是Swift語言的一個特性之一。所謂擴展,就是在不使用繼承的狀況下,對現有的類新增方法,屬性等操做,擴展不會破壞現有的類方法,僅僅在使用的時候進行動態添加。應該記住一個原則: 擴展優於繼承
而這個特性Java語言並不支持。

Kotlin

fun MutableList<Int>.swap(index1: Int, index2: Int) {
      val tmp = this[index1] // 'this' corresponds to the list
      this[index1] = this[index2]
      this[index2] = tmp
}

Data Class

在開發過程當中,咱們經常要不斷寫一些Model類,不斷地使用開發工具生成set/get方法。Data Class就是爲簡化這個操做而生的,數據類會自動生成set/get方法,而不用顯式生成set/get方法,看下面的簡單用法:

Kotlin

data class Person(var name: String?,var age: Int?)

僅僅使用這樣一行代碼就完成Model類的建立,Kotlin會自動幫咱們生成set/get方法,極大地簡化了Model類的編寫工做。不過,Java程序員也不用太羨慕,不少Java框架也能夠實現這一點,好比Google推出的Auto Value框架等等

Operator Overloading

這個特性在Swift語言中也存在,在C++語言中也存在。這個特性是一把雙刃劍,使用操做符重載能夠簡化使用,也會損失一些代碼可讀性。因此,在使用操做符重載的時候,請慎重考慮。

關於Kotlin語言的特性一時半會也說不完,下面咱們就一些比較重要的特性和Java語言作一個簡單的對比:

語言特性 Kotlin Java
Null Safe 支持 Java8支持
全局函數 支持 不支持
Lambdas 支持 Java8支持
Extension 支持 不支持
Data Class 支持 不支持(須要依賴框架)
Operator Overloading 支持 不支持

Java語言徹底互通

你可能會擔憂使用Kotlin語言以後,以前的Java代碼怎麼辦。這個擔憂是徹底多餘的,JetBrains保證Kotlin和Java語言能夠實現徹底地互相調用,Kotlin最終也會編譯成Java字節碼。

Kotlin語言優點

有網友統計,使用Kotlin語言大約能夠減小30%的代碼編寫,同時也不用再擔憂空指針異常,因爲JetBrains的自然基因,Kotlin能夠得到較好的維護、升級。最後,對於Oracle公司對Google的頻繁訴訟,這也算是一個很好的還擊。在Kotlin語言發佈以後,國外已經有不少開發人員推出了大量好用的Kotlin框架,你能夠不用重複創造輪子。同時,Kotlin語言能夠和Java語言實現無縫鏈接,你還在等什麼呢?

建議

對於Kotlin語言,大部分開發人員都對Kotlin語言抱有積極態度。我本人也很是推崇Kotlin語言,若是你熟悉相似Python,Ruby等腳本語言,亦或者熟悉Swift語言,Kotlin語言將是你不二的選擇。而若是你已經厭倦了Java語言冗餘繁雜的寫法,Kotlin語言也很是值得一試,相信你也會像我同樣愛上這門語言。

原文來自: https://www.linuxprobe.com/kotlin-language.html

相關文章
相關標籤/搜索