:符號蕊温、
????用于類名后表示繼承询张,用于變量后限定變量類型展懈。
$符號无切、
????字符串模版符號
????????????????println("item==$item")
????????????????println("sum === ${value1 + value2}")
?符號、
????表示該對象可能為null
????????var userName:String? = "nan"
? ? ? ? fun parseInt(str:String):Int?{
????????????????//函數(shù)返回值未Int類型或者null}
????????str?.length ????//如果str非空啡省,則返回str.length,否則返回null髓霞。它的返回類型未Int?
?:卦睹、Elvis操作符
????當(dāng)?:左側(cè)表達(dá)式非空時(shí),elvis操作符就返回其左側(cè)表達(dá)式值方库,否則就返回其右側(cè)表達(dá)式值结序。只有左側(cè)為空時(shí),才會(huì)對右側(cè)進(jìn)行求值纵潦。
????????????if-else形式:val value: Int = if (a != null) a.length else -1
? ? ? ? ? ? Elvis操作符:val value = a?.length ?: -1?
!!徐鹤、忽略非空檢查
????var a:String? = null
????val length = a!!.length????如果a為null則拋出空指針異常
==和===、
????==:判斷值是否相等
????===:判斷值以及引用是否完全相等val def:Int = 10val a:Int? = defval b:Int? = defval x = a==b//x值為true val y = a===b//y值為false
..邀层、表示區(qū)間(rangeTo函數(shù))
????..一般配合in和!in關(guān)鍵字進(jìn)行使用返敬。可比較類型均可使用此符號寥院,針對整型劲赠,它有優(yōu)化的實(shí)現(xiàn)。
????????1秸谢、(a in 1..9) ???? //表示 1 <= a && i <= 9
????????2凛澎、(a in 1 until 9)????//表示1 <= a && i < 9 (until函數(shù),創(chuàng)建愛你一個(gè)不包括其結(jié)束元素的區(qū)間)估蹄。?
????????3塑煎、(a in 9..1)//錯(cuò)誤寫法,..為遞增區(qū)間
? ? ? ? 4臭蚁、(a in 9 downTo 1)// 從9開始遞減到1
step()函數(shù)最铁、
????可以指定任意步長
????????????for(a in 1..9 step 2){print(a)}????//輸出:13579
????????????for(a in 9..1 step 2){print(a)}????//輸出:97531
_(下劃線)、
????data class User(var name:String,var age:Int)
????數(shù)據(jù)類User中聲明了兩個(gè)變量name垮兑、age炭晒。解構(gòu)時(shí)如果只需要name變量值
????val user = User("nan",28)val (name,_) = user
::符號、
????1甥角、得到類的Class對象
????????????????startActivity(Intent(this@MyActivity,MainActivity::class.java))
????2网严、方法引用
????????????????val list = listOf(1, 2, 3, 4, 5) list.forEach(::print)
@符號、
????1嗤无、this類型限定startActivity(Intent(this@MyActivity,MainActivity::class.java)
????2震束、表達(dá)式命名標(biāo)簽怜庸、匿名函數(shù)命名標(biāo)簽、跳出循環(huán)?
????????loop@ for (a in 1..9) {
?????????????????????????for (b in 1..5) {
?????????????????????????????????if (a == 5) break@loop else println("打印行== ${a + b}")
?????????????????????????}
?????????????????????}
? ? ? ? ? val a = run(outer@{ return@outer 2})
????3垢村、所有的方法名會(huì)自動(dòng)被封裝成為標(biāo)簽割疾,在函數(shù)體內(nèi)調(diào)用return和調(diào)用return@函數(shù)名,是相同的效果
????????val a = run { return@run 2 }
????????val a = run { return 2 }
????4嘉栓、跳出forEachfun?
????????forEachFun(list: List) {
????????????run(outer@ {
????????????????list.forEach {
????????????????????if (it == 1) return@forEach //等于在forEach函數(shù)中使用continue,實(shí)際上是從匿名函數(shù)返回
????????????????????if (it == 5) return@outer //等于在forEach函數(shù)中使用break,實(shí)際上是跳轉(zhuǎn)到outer之外
????????????????????println("===$it")
????????????????}
????????????})
????????}
{}宏榕、lambda表達(dá)式
????// 一個(gè)參數(shù)
????????var value1: ((str: String) -> Unit)? = { println(it) }
????????value1?.invoke("aaaaaa")? // 判斷并使用
????//兩個(gè)參數(shù)
????????var value2: ((name: String, age: Int) -> Unit)? = { name: String, age: Int -> println("$name's age is $age") }
????????value2?.invoke("nan", 28)
????//類型可以推斷
????????var value3: ((num1: Int, num2: Int) -> String)? = { num1, num2 ->
????????var res: Int = num1 + num2
????????res.toString()
????????}
????????println(value3?.invoke(1, 2))