Kotlin:Kotlin代碼小細節:常見符號【?,?.,?:,!!,filterNotNull,&,==,::】

目錄

【?可空類型】

變量能夠接受null值,須要用?修飾java

var a: String = "abc"
a = null // 編譯錯誤

若是咱們定義的變量是一個能夠爲空的類型,則要用String?
var b: String? = "abc"
b = null // 編譯經過
複製代碼

【?.安全調用操做符】

若是咱們要獲取字符串b的長度,則調用b.length,這時候編譯器會報錯安全

val l = b.length // 錯誤:變量「b」可能爲空
val l = b?.length//ok,若是 b 非空,就返回 b.length,不然返回 null,{: .keyword },這個表達式的類型是 Int?。
複製代碼

【?:Elvis 操做符】

對於上面的例子,在開發中咱們常常的操做是,當b不爲空時,咱們返回另外一個值y,當b爲空時,咱們返回一個值x,而不是null, 這樣就用到Elvis操做符函數

val l = b?.length?:-1//當b不爲空時,返回b.length,當b爲空時,返回-1
複製代碼

【!!操做符】

若是我傳的b爲空,我但願系統直接給我拋出個NPE異常,就會用到!!操做符ui

val l = b!!.length//若是b不爲空,則返回b.length,若是b爲空,則拋出異常NullPointerException
複製代碼

【filterNotNull】

若是你有一個可空類型元素的集合,而且想要過濾非空元素,你可使用 filterNotNull 來實現this

val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()
複製代碼

【$符號】

這個特別簡單,也很好用,舉個例子,開發中咱們會常去拼接請求的urlurl

------------java------------
String baseUrl = "http://www.baidu.com/"
String imageUrl = baseUrl+"?page=1&size=10"//固然這些數字不能寫死,通常咱們都是添加在FormBody中的
------------kotlin-------------
val imageUrl = "$baseUrl?page=$page&size=$size"
複製代碼

【==和===】

==判斷值是否相等,===判斷值及引用是否徹底相等。spa

val num: Int = 128;
val a:Int? = num
val b:Int? = num
println(a == b)  //true
print(a === b)   //true
複製代碼

【..區間】

區間(或叫做範圍)表達式由具備操做符形式 .. 的 rangeTo 函數輔以 in 和 !in造成。code

if (i in 1..10) { // 等同於 1 <= i && i <= 10
    println(i)
}
//使用until函數,建立一個不包括其結束元素的區間
for (i in 1 until 10) {   // i in [1, 10) 排除了 10
     println(i)
}
//若是你想倒序迭代數字呢?也很簡單。你可使用標準庫中定義的 downTo() 函數
for (i in 4 downTo 1) print(i) // 輸出「4321」
//可否以不等於 1 的任意步長迭代數字? 固然沒問題, step() 函數有助於此
for (i in 1..4 step 2) print(i) // 輸出「13」
for (i in 4 downTo 1 step 2) print(i) // 輸出「42」
複製代碼

【_】

data class Book(var id: Int, var name: String)
Book聲明瞭 id,name兩個變量。解構時若是隻須要id這一個變量時
val book = Book(1, "英語")
val (id, _) = book
複製代碼

【::】獲得類的Class對象

//獲得類的Class對象
startActivity(Intent(this@KotlinActivity, MainActivity::class.java))

複製代碼
相關文章
相關標籤/搜索