今天是 Google I/O 2017 大會第一日。一覺醒來,發(fā)現(xiàn) Kotlin 成為了 Android 的官方開發(fā)語言。谷歌安卓團隊今天在 Google I/O 2017 大會 上宣布對 Kotlin 提供 first-class 的支持。
Kotlin來自捷克一家軟件研發(fā)公司JetBrains,這家公司開發(fā)很多不錯的好IDE,包括IntelliJ IDEA、Pycharm、PHPStorm等工具,Google官方提供的Android Studio也是JetBrains公司提供的。Kotlin號稱Android世界的Swift。官方網(wǎng)址
Kotlin的優(yōu)勢:
- 創(chuàng)建一種兼容Java的語言
- 編譯速度至少同Java一樣快
- 比Java更安全
- 比Java更簡潔
- 比最成熟的競爭者Scala還簡單
主要特性如下所示:
輕量級:這一點對于Android來說非常重要。項目所需要的庫應該盡可能的小。Android對于方法數(shù)量有嚴格的限制,Kotlin只額外增加了大約6000個方法。
互操作:Kotlin可與Java語言無縫通信。這意味著我們可以在Kotlin代碼中使用任何已有的Java庫;因此,即便這門語言還很年輕,但卻已經(jīng)可以使用成百上千的庫了。除此之外,Kotlin代碼還可以為Java代碼所用,這意味著我們可以使用這兩種語言來構建軟件。你可以使用Kotlin開發(fā)新特性,同時使用Java實現(xiàn)代碼基的其他部分。
強類型:我們很少需要在代碼中指定類型,因為編譯器可以在絕大多數(shù)情況下推斷出變量或是函數(shù)返回值的類型。這樣就能獲得兩個好處:簡潔與安全。
Null安全:Java最大的一個問題就是null。如果沒有對變量或是參數(shù)進行null判斷,那么程序當中就有可能拋出大量的NullPointerException,然而在編碼時這些又是難以檢測到的。Kotlin使用了顯式的null,這會強制我們在必要時進行null檢查。
高階函數(shù)、操作符重載、字符串模板等特征。
Demo演示
先來一段以前寫過的demo來看看,也許你會因為它的簡潔,方便而愛不釋手。
fun main(args: Array<String>) {
// 常量(使用val關鍵字聲明):
val a: Int = 10
val b = 10 // `Int`類型自動推斷
val c: Int // 如果沒有初始值,聲明常量時,常量的類型不能省略
c = 10 // 明確賦值
val strings = arrayOfNulls<String>(10)//定義數(shù)組
val strings1 = arrayOf("one", "two")
// 變量(使用var關鍵字聲明):
var x = 5 // `自動推斷出 Int`類型
x += 1
// 可空布爾
val isFirst: Boolean? = null
println("isFirst=$isFirst")
// println(sum(c, x))
// printSum2(a, b)
// println(max2(c, x))
val list = ArrayList<String>()
list.add("one")
list.add("AA")
list.add("BB")
list.add("aCC")
list.add("Adc")
list.add("A133cdf")
list.add("A123cdf")
getArrayList(list)
}
/**
* 定義函數(shù)
*/
fun sum(a: Int, b: Int): Int {
return a + b
}
fun sum2(a: Int, b: Float) = a + b
fun printSum(a: Int, b: Int): Unit {
println(a + b)
}
fun printSum2(a: Int, b: Int) {
println(a + b)
}
/**
* 條件判斷
*/
fun max(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
fun max2(a: Int, b: Int) = if (a > b) a else b
/**
* 類型后添加“?”來標識該引用可為空
*/
fun parsenInt(str: String): Int? {
if (str is String) {
return str.length
}
return null
}
/**
* 判斷后的分支中可以直接當作該類型使用,無需顯式轉(zhuǎn)換
*/
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj`在該條件判斷分支內(nèi)自動轉(zhuǎn)換成`String`
return obj.length
} else {
// 在離開類型判斷分支后,`obj`仍然是`Any`類型
return null
}
}
/**
* for循環(huán)
*/
fun getArray(args: Array<String>) {
for (arg in args) {
print(arg)
}
for (i in args.indices) {
print(args[i])
}
}
/**
* while循環(huán)
*/
fun getArray2(args: Array<String>) {
var i: Int = 0
while (i < args.size) {
print(args[i++])
}
}
/**
* When表達式,比switch功能更強大
*/
fun case(obj: Any) {
when (obj) {
1 -> print("One")
"hello" -> print("String")
is String -> print("This is String type")
else -> print("unknown")
}
}
/**
* 區(qū)間(range)
*/
fun range(args: Array<String>) {
val x = 0
// 是否在指定區(qū)間內(nèi)
if (x in 1..10) {
print("In")
} else {
print("Out")
}
if (x !in 0..args.lastIndex) {
print("Out")
}
}
/**
* 使用集合
*/
fun getArrayList(names: ArrayList<String>) {
names.filter { it.startsWith("A") }
.sortedBy { it }
.map(String::toUpperCase)
.forEach(::println)
}
是不是感覺爽爆了呢,現(xiàn)在開始可以拋棄Java了。