<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Kotlin被Google官方認為是Android開發的一級程式語言。今天,我將主要講解,關於Kotlin的一些實用語法糖,主要包括:
主要用於表示範圍,主要包括:in、downTo、step、until
/** * 1. in * 作用:在...範圍內 **/ // 表示:若i在1-5範圍內,則執行下面程式碼 // 注:閉區間,[1,5] if (i in 1..5) { println("i 在 1-5 內") } // 表示:若i不在1-5範圍內,則執行下面程式碼 // !in表示不在...範圍內 if (i !in 1..5) { println("i 不在 1-5 內") } /** * 2. until * 作用:表示開區間 **/ // 輸出1234 for (i in 1 until 5) { println(i) } /** * 3. downTo * 作用:倒序判斷 **/ for (i in 5 downTo 1) { println(i) } /** * 4. step * 作用:調整步長 **/ // 設定步長為2,順序輸出1、3、5 for (i in 1..5 step 2) println(i) // 設定步長為2,倒序輸出5、3、1 for (i in 1 downTo 5 step 2) println(i)
包括:is、智慧轉換 和 as
/** * 1. is * 作用:判斷一個物件與指定的型別是否一致 **/ // 判斷變數a的資料型別是否是String var a: Any = "a" if (a is String) { println("a是String型別") } if (a !is Int) { println("a不是Int型別") } /** * 2. 智慧轉換 * 說明: kotlin不必使用顯式型別轉換操作,因為編譯器會跟蹤不可變值的is檢查以及顯式轉換,並在需要時自動插入(安全的)轉換 **/ var a: Any = "a" if (a is String) { println("a是String型別") println(a.length) // a 自動轉換為String型別 //輸出結果為:1 } // 反向檢查: a自動轉換為String型別 if (a !is String) { print(a.length) } // 在 && 和 || 的右側也可以智慧轉換: // `&&` 右側的 a 自動轉換為String if (a is String && a.length > 0) // `||` 右側的 a 自動轉換為String if (a is String || a.length > 0) // 在when表示式和while迴圈裡也能智慧轉換: when(a){ is String -> a.length is Int -> a + 1 } // 需要注意:當編譯器不能保證變數在檢查和使用之間不可改變時,智慧轉換不能用。智慧轉換能否適用根據以下規則: // 1. val 區域性變數——總是可以,區域性委託屬性除外; // 2. val 屬性——如果屬性是 private 或 internal,或者該檢查在宣告屬性的同一模組中執行。智慧轉換不適用於 open 的屬性或者具有自定義 getter 的屬性; // 3. var 區域性變數——如果變數在檢查和使用之間沒有修改、沒有在會修改它的 lambda 中捕獲、並且不是區域性委託屬性; // 4. var 屬性——決不可能(因為該變數可以隨時被其他程式碼修改) /** * 3. 強制型別轉換:as **/ var any: Any = "abc" var str: String = any as String // 強制型別轉換是不安全的,若型別不相容則會丟擲一個異常 var int: Int = 123 var str: String = int as String // 丟擲ClassCastException /** * 4. 可空轉換操作符:as? * 作用:null不能轉換為String,因該型別不是可空的,此時使用可空轉換操作符as? **/ var str = null var str2 = str as String // 丟擲TypeCastException // 使用安全轉換操作符as?可以在轉換失敗時返回null,避免了丟擲異常。 var str = null var str2 = str as? String println(str2) //輸出結果為:null
在Kotlin中,存在結構相等 & 參照相等 兩種相等判斷。
/** * 1. 結構相等:equals()或 == * 作用:判斷兩個結構是否相等 **/ var a = "1" var b = "1" if (a.equals(b)) { println("a 和 b 結構相等") // 輸出結果為:a 和 b 結構相等 } var a = 1 var b = 1 if (a == b) { println("a 和 b 結構相等") // 輸出結果為:a 和 b 結構相等 } /** * 2. 參照相等:=== * 作用:判斷兩個參照是否指向同一物件 */ // 設定一個類如下 data class User(var name: String, var age: Int) // 設定值 var a = User("Czh", 22) var b = User("Czh", 22) var c = b var d = a // 對比兩個物件的結構 if (c == d) { println("a 和 b 結構相等") } else { println("a 和 b 結構不相等") } // 對比兩個物件的的參照 if (c === d) { println("a 和 b 參照相等") } else { println("a 和 b 參照不相等") } // 輸出結果: a 和 b 結構相等 a 和 b 參照不相等
/** * 1. 可空型別與非空型別 * 在Kotlin中,有兩種情況最可能導致出現NullPointerException **/ // 情況1:顯式呼叫 throw NullPointerException() // 情況2:使用!! 操作符 // 說明:!!操作符將任何值轉換為非空型別,若該值為空則丟擲異常 var a = null a!! // 丟擲KotlinNullPointerException // 情況3:資料型別不能為null // 在 Kotlin 中,型別系統區分一個參照可以容納 null (可空參照) 和 不能容納(非空參照) // 如:String型別變數不能容納null // 若要允許為空,可宣告一個變數為可空字串:在字串型別後面加一個問號? 對於String,則是寫作:String? var b: String? = "b" b = null /** * 2. 安全呼叫操作符 * 作用:表示如果若不為null才繼續呼叫 **/ b?.length // 表示:若b不為null,才呼叫b.length // 注:安全呼叫符還可以鏈式呼叫 a?.b?.c?.d // 假設a不為null,才繼續往下呼叫,以此類推 // 若該鏈式呼叫中任何一個屬性為null,整個表示式都會返回null。 // 若只對非空值執行某個操作,可與let一起使用 a?.b?.let { println(it) }
至此,關於Kotlin
的入門語法講解完畢,更多關於Kotlin空安全型別轉換相等性判斷的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45