前言:.kotlin是一門語言,光靠一篇文章要入門不太現實,因此這篇文章重點講的是kotlin相對於java的一些特性和這些特性帶來的好處.java
Kotlin 是一種在 Java 虛擬機上運行的靜態類型編程語言,被稱之爲 Android 世界的Swift,由 JetBrains 設計開發並開源,idea也是這個公司開發的。編程
Kotlin 能夠編譯成Java字節碼,也能夠編譯成 JavaScript,方便在沒有 JVM 的設備上運行,kotlin可直接在idea裏面轉爲java。設計模式
在Google I/O 2017中,Google 宣佈 Kotlin 成爲 Android 官方開發語言。安全
用java用得好好的,爲何要用kotlin呢?這裏只講關鍵的幾個點,還有其餘特性有興趣的話能夠去深刻了解。編程語言
其實爲何要強調簡潔性呢,由於代碼量越少,bug出現的機率就越低。若是一個方法須要大量的代碼去實現,後面看的人也很差理解和維護。ide
變量經過var關鍵字定義,常量經過val關鍵字定義.既支持類型推倒也支持顯示聲明類型,大多數狀況下都是用類型自動推倒。函數
var intVar = 1 // 經過取值能夠自動推倒出變量的類型
工具
var stringVar: String = "abc" // 也能夠顯式聲明變量類型
學習
val INT_VALUE = 1 // 使用val關鍵字定義常量
idea
1.二、數據類
數據類是kotlin一個可明顯看出減小代碼量的特性。
// 數據類,除了有name和age兩個成員變量以外還自動生成了equals,hashCode,toString等方法
data class Person(var name: String, var age: Int)
只須要這一行代碼,就至關於java中一個實體類。
不可變list
val list = listOf("a","b","c")
可變list
val list = mutableListOf("a","b","c")
其餘集合也同理,而java要實現相同的功能須要new,再逐一set進去。
val info = "name:$name,age:$age"
直接在變量前加$
kotlin中的lambda語法再加上高階函數的使用,可把原來幾十行代碼精簡爲幾行代碼,但初學時會難以理解。
fun getNumResult(result: (Int, Int) -> Int): Int {
return result(1,2)
}
var value = getNumResult{ a, b -> a * b }
上面代碼就至關於一個實現了乘法的方法。
val list = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
list.filter { it%2==0 } // 過濾掉奇數
.map{ it*it } // 平方
.sortedDescending() // 降序排序
.take(3) // 取前 3 個
.forEach { println(it) } // 遍歷, 打印
java中雖然有@Nullable @NotNull等註解。可是不會在編譯期起做用,而是在運行期拋出異常。kotlin在聲明變量的時候,能夠指定變量是否爲空,調用可爲空對象時,須要進行空判斷。
var mNullable: Any? = null 可空
var mNonNull: Any = XXX 非空
固然,一個語言就算作的再好,可是沒有一個健全的生態的話是很難被大衆接受的.kotlin可以火起來,甚至被谷歌爸爸欽定爲安卓的官方推薦語言.一個很重要的緣由就是它能夠無縫與java相互調用.之前寫的java代碼不用任何處理就能直接在kotlin中使用,而java也能無縫調用kotlin代碼.
實際上在安卓中,編譯的時候kotlin代碼就會被編譯成java代碼,因此它們實際上是等價的.
一、靜態代碼分析工具的缺少和成熟設計模式的缺少
二、成熟的工具類較少
三、學習成本較高,特別是高階函數
四、接口沒有重載
總結:使用kotlin寫某個比較少人須要維護的服務仍是挺不錯的,爲何強調比較少人須要維護.由於學習一門新語言須要學習成本,不能要求每一個人都懂,可是用kotlin來寫確實是能夠減小開發時間,雖然原生的kotlin工具類少,但能夠調用java的工具類,因此實際用起來仍是不錯的。