Kotlin初探


    前幾天看到新聞,Google將Kotlin語言作為Android應用開發的一級語言, 與Java並駕齊驅, 這則消息在開發界一下就炸開了鍋( 好像平息的很快。。。)! 連Google的親兒子go語言也沒有這種待遇。Kotlin是什么鬼,感覺隱隱約約好像在哪里見過啊,對IDEA新建工程時可以看到。

大名鼎鼎的Java IDE IntelliJ提供商JetBrains開發的,而且是開源的。

      看到這里我再也淡定不住了,決定去一探究竟,哥以前學Java可是同時打着J2EE和Android的主意,這下Java在Android平台苗頭不太對,得去學習學習Kotlin才能安心。

官網的簡單介紹:Kotlin是針對現代對平台應用的靜態類型編程語言,100%可以與java™和Android™互操作。Kotlin可以編譯成Java字節碼在JVM上運行,在安卓設備上運行,也可以編譯成Javascript,在瀏覽器運行,這是要一統江湖的節奏嗎?

老規矩,Hello World!跑起來,使用IDEA2016就不用去搭建開發環境了,直接開搞了。

package com.newstart.kotlin

fun main(args: Array<String>) {
    print("Hello World!")
}

和Java區別還是有一點大的,mian方法是包級別的,Java是要在類里,參數聲明是:參數名:參數類型,簡潔了好多。

 

 

為什么選擇 Kotlin?簡約、安全、互操作性、工具友好

  • 簡約

大大減少樣板代碼的數量,一行代碼搞定POJO包括getters,setter,equals(), hashCode(),toString() 和copy()等方法。(copy類似clone,但是比clone強大)

data class User(var name: String, var age: Int, var sex: String)

fun main(args: Array<String>) {
    var user = User("代碼如此多嬌", 27, "man")
    println(user.name)
    println(user.age)
    println(user.sex)
    println(user)
}

fun getUser(): User {
    return User("代碼如此多嬌", 27, "man")
}

是不是比Java代碼簡潔了好多?支持lambda表達式,過濾list中等於"l"的元素。

fun main(args: Array<String>) {
    var list1 = listOf("h", "e", "l", "l", "o")
    var list2 = list1.filter { it != "l" }
    println(list2)
}

lambda表達式Java8也有就沒有什么對比啦!快速簡單的構建一個單例,這個就真的是簡單粗暴了。

object SingletonDemo {
    var username: String = "test"
    var pasword: String = "111"
}

使用object聲明單例類。

 

  • 安全

Kotlin對比於Java的一個最大的區別就是它致力於消除空引用所帶來的危險。NullPointerException(NPE)應該是開發中遇到的最多的一種運行時異常了。

fun test1(){
    var a: String = null//編譯錯誤,默認是不可為null的

    var b: String? = null //可以為空
    println(b.length) ////編譯錯誤
}

類型自動檢測

//如果你在代碼中已經判斷類型符合了
//Kotlin編譯器會自己進行類型轉換
fun test2(user: Any) {
    if (user is User)
        print(user.age)
}
  • 互操作性

使用跑在JVM上的任何現有庫,因為有 100% 的兼容性,包括 SAM 支持,看到這個我就放心了。

package com.newstart.kotlin

import org.apache.commons.lang3.StringUtils

fun main(args: Array<String>) {
    //val聲明不可變變量
    val str: String = "a,b,c,d,e"
    val array = StringUtils.split(str, ",")
    for (s in array) {
        print(s)
    }
}

  • 工具友好

這個算不算JetBrains的一波強勢廣告?IDEA最好的Java IDE 沒有之一。

其他

  • 帶返回值的方法

fun getUser(): User {
    return User("代碼如此多嬌", 27, "man")
}
  • When

when (map["a"]) {
    '1' -> println("1")
    '2' -> println("2")
    is Char -> println("Char")
    !is String -> println("Not a string")
    else -> println("Unknown")
}
  • Map

val map = hashMapOf<String, Char>()
map.put("a", '1')
map.put("b", 'b')
for ((key, value) in map) {
    println("key = $key, value = $value")
}
  • 解構聲明,將類解構成變量

var user = User("代碼如此多嬌", 27, "man")
var (name, age, sex) = user
println("$name,$age,$sex")
  • 屬性委托-懶加載

class LazySample {
    val lazy: String by lazy {
        println("computed!")
        "my lazy"
    }
}
fun main(args: Array<String>) {
    val sample = LazySample()
    println("lazy = ${sample.lazy}")
    println("lazy = ${sample.lazy}")
}
輸出
computed! 
lazy = my lazy 
lazy = my lazy

屬性委托-觀察,Map屬性委托等等等等......

 

想要更深入的了解可以去他的官網https://try.kotlinlang.org,官網一系列可以在線編寫運行的demo和教程,如果你是Android開發者趕緊行動起來吧,Google支持的沒有錯。搞J2EE的就可以持觀望態度了,比如說我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM