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) }
複製代碼
在Kotlin中,for循環使用in關鍵字進行遍歷。
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
複製代碼
這是while循環的一個簡單示例
val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
複製代碼
在Kotlin中使用When表達式來代替Switch語句,一個簡單的示例以下:
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
複製代碼