Android官方開發(fā)語音--Kotlin

今天是 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)勢:

  1. 創(chuàng)建一種兼容Java的語言
  2. 編譯速度至少同Java一樣快
  3. 比Java更安全
  4. 比Java更簡潔
  5. 比最成熟的競爭者Scala還簡單

主要特性如下所示:

  1. 輕量級:這一點對于Android來說非常重要。項目所需要的庫應該盡可能的小。Android對于方法數(shù)量有嚴格的限制,Kotlin只額外增加了大約6000個方法。

  2. 互操作:Kotlin可與Java語言無縫通信。這意味著我們可以在Kotlin代碼中使用任何已有的Java庫;因此,即便這門語言還很年輕,但卻已經(jīng)可以使用成百上千的庫了。除此之外,Kotlin代碼還可以為Java代碼所用,這意味著我們可以使用這兩種語言來構建軟件。你可以使用Kotlin開發(fā)新特性,同時使用Java實現(xiàn)代碼基的其他部分。

  3. 強類型:我們很少需要在代碼中指定類型,因為編譯器可以在絕大多數(shù)情況下推斷出變量或是函數(shù)返回值的類型。這樣就能獲得兩個好處:簡潔與安全。

  4. Null安全:Java最大的一個問題就是null。如果沒有對變量或是參數(shù)進行null判斷,那么程序當中就有可能拋出大量的NullPointerException,然而在編碼時這些又是難以檢測到的。Kotlin使用了顯式的null,這會強制我們在必要時進行null檢查。

  5. 高階函數(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了。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容