Kotlin那些鮮爲人知的祕密:1.基礎入門(2)

字符串模板

Kotlin中容許字符串中包含「$」開頭嵌入表達式。java

在Java中咱們可能須要這樣定義來拼接字符串:安全

String message = "n = " + n;
複製代碼

可是在Kotlin中,咱們能夠直接使用「$」拼接:app

val message = "n = $n"
複製代碼

很顯然,使用字符串模板,能夠提升咱們的開發效率。ui

條件表達式

這是一個普通的條件判斷語句。this

fun maxOf(a: Int, b: Int): Int {
        if (a > b) {
            return a
        } else {
            return b
        }
    }
複製代碼

在Kotlin中,if表達式具備返回值,故能夠表述成以下方式:spa

fun maxOf(a: Int, b: Int) = if (a > b) a else b
複製代碼

關於空安全

空安全性是Kotlin的一大特點,在Java中,NPE(NullPointerException)是常客,可是在Kotlin中,咱們將會看到NPE。code

對於可爲空的變量,咱們必須用「?」將其特殊聲明爲一個具備空值的變量:開發

var b: String? = "abc"
複製代碼

而正常使用是這樣的字符串

var b: String = "abc"
複製代碼

若是咱們直接調用b的話就會報錯get

val l = b.length()
複製代碼

那麼,咱們該如何使用可空變量呢?

咱們能夠使用安全操做符"?."對其進行方法調用,Like this:

b?.length()
複製代碼

若是b爲空,則返回空;不然,調用b.length()。

爲何要使用空安全操做符呢?

這使得咱們解決了判空的問題,與「!= null」永遠說再見,並且,空安全符在鏈式調用中會顯得很是優美。

bob?.department?.head?.name
複製代碼

安全轉換

在Java中,類型轉換錯誤就會產生ClassCastException,而在Kotlin中,我麼你能夠經過安全轉換 "as?" 來避免這個問題。

val aInt: Int? = a as? Int
複製代碼

若是轉換失敗,則返回空,不然返回正確數據。

類型檢查

在Java中,校驗一個類型能夠使用"instanceof",在Kotlin中,咱們能夠使用"is"

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    return obj.length
  }
  return null
}
複製代碼

集合

在Kotlin中,能夠使用in操做符對集合進行迭代遍歷。

for (item in items) {
        println(item)
    }
複製代碼

Kotlin更支持lambda對集合進行過濾等操做;

fruits
    .filter { it.startsWith("a") }
    .sortedBy { it }
    .map { it.toUpperCase() }
    .forEach { println(it) }
複製代碼

for 循環

在Kotlin中,for循環使用in關鍵字進行遍歷。

val items = listOf("apple", "banana", "kiwi")
    for (item in items) {
        println(item)
    }
複製代碼

while 循環

這是while循環的一個簡單示例

val items = listOf("apple", "banana", "kiwi")
    var index = 0
    while (index < items.size) {
        println("item at $index is ${items[index]}")
        index++
    }
複製代碼

when 表達式

在Kotlin中使用When表達式來代替Switch語句,一個簡單的示例以下:

fun describe(obj: Any): String =
    when (obj) {
        1          -> "One"
        "Hello"    -> "Greeting"
        is Long    -> "Long"
        !is String -> "Not a string"
        else       -> "Unknown"
    }
複製代碼
相關文章
相關標籤/搜索