前幾天看到新聞,Google將Kotlin語言作為Android應用開發的一級語言, 與Java並駕齊驅, 這則消息在開發界一下就炸開了鍋( 好像平息的很快。。。)! 連Google的親兒子go語言也沒有這種待遇。Kotlin是什麼鬼,感覺隱隱約約好像在哪裡見過啊,對IDEA新建工程時可以看到。 大 ...
前幾天看到新聞,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的就可以持觀望態度了,比如說我。