-
?可空類型
表示這個(gè)對象可能為空
var a: String? = "aaa"
-
?.安全調(diào)用符
val len = a?.length //如果 a非空芥驳,就返回 a.length 资柔,否則返回 null丛晌,這個(gè)表達(dá)式的類型是 Int? 。
-
弄诲?:Elvis 操作符
對于上面的列子當(dāng)a不為空時(shí)返回正常的值,但當(dāng)a為空時(shí)返回null娇唯,顯然返回null不能滿足我們開發(fā)要求齐遵,所以可以使用?:操作符
val l = a?.length ?: -1//當(dāng)a為空時(shí)返回-1
-
!!操作符
如果希望直接拋出NPE異常可以用!!操作符
val n1 = a!!.length
-
==號與===號
==判斷值是否相等塔插,===判斷值及引用是否完全相等梗摇。
val c: Int = 128
val a1:Int? = c
val a2:Int? = c
println(a1 == a2) //true
print(a1 === a2) //true
-
..區(qū)間以及 in 和 !in 操作符
if (i in 1..10) { // 等價(jià)于 i >= 1 && i <= 10 或者 i in [1, 10]
println(i)
}
//使用until函數(shù),創(chuàng)建一個(gè)不包括其結(jié)束元素的區(qū)間
for (i in 1 until 10) { // i>=1 && i < 10 或者 i in [1, 10) 排除了 10
println(i)
}
if (i !in 1..10) { // i < 1 || i > 10
println(i)
}
-
downTo() 函數(shù)
如果你想倒序迭代數(shù)字呢?也很簡單想许。你可以使用標(biāo)準(zhǔn)庫中定義的 downTo() 函數(shù)
for (i in 5 downTo 1)
print(i) // 輸出“54321”
-
step()步長
在上面的例子中我們也可以指定步長
for (i in 1..5 step 2)
print(i) // 輸出“135”
for (i in 5 downTo 1 step 2)
print(i) // 輸出“531”
-
_(下劃線)
data class Book(var id: Int, var name: String)
上面的示例中伶授,Book聲明了 id断序,name兩個(gè)變量。解構(gòu)時(shí)如果只需要id這一個(gè)變量時(shí)糜烹,可以這么做:
val book = Book(1, "英語")
val (id, _) = book
-
::符號
得到類的Class對象
startActivity(Intent(this@KotlinActivity, MainActivity::class.java))
-
@符號
1.限定this的類型
class User {
inner class State{
fun getUser(): User{
//返回User
return this@User
}
fun getState(): State{
//返回State
return this@State
}
}
}
2.跳出雙層for循環(huán)
loop@ for (itemA in arraysA) {
var i : Int = 0
for (itemB in arraysB) {
i++
if (itemB > 2) {
break@loop
}
println("itemB:$itemB")
}
}
3.命名函數(shù)自定義標(biāo)簽
fun fun_run(){
run {
println("lambda")
}
var i: Int = run {
return@run 1
}
println("$i")
//匿名函數(shù)可以通過自定義標(biāo)簽進(jìn)行跳轉(zhuǎn)和返回
i = run (outer@{
return@outer 2
})
println(i)
}
-
$操作符
字符串可以包含模板表達(dá)式违诗,及一小段代碼,會求值并把結(jié)果包含到字符串中疮蹦。模板字符串以美元符號$開頭诸迟,由一個(gè)簡單的名字構(gòu)成:
val key = 5
val str1 = "the key is $key"http://輸出:the key is 5
val s = "abc"
val str2 = "$s.length is ${s.length}"http://輸出:abc.length is 3
var args = arrayOf("Cat", "Dog", "Rabbit")
print("Hello ${args[0]}")//輸出:Hello Cat
-
三個(gè)雙引號
三引號的形式用來輸入多行文本,也就是說在三引號之間輸入的內(nèi)容將被原樣保留愕乎,之中的單號和雙引號不用轉(zhuǎn)義阵苇,其中的不可見字符比如/n和/t都會被保留。
val str = """
one
two
"""
//等價(jià)于
val str = "one\ntwo"
val str = "one" +"\n"+"two"