Kotlin從入門(mén)到放棄(三) 控制語(yǔ)句
前面總結(jié)的基本類型和容器的用法,接下來(lái)我們來(lái)學(xué)習(xí)Kotlin在控制語(yǔ)句上的改進(jìn)和優(yōu)化蚣常,是如何方便我們我們?cè)陂_(kāi)發(fā)中的日常使用市咽。
1.條件分支
1.1簡(jiǎn)單分支
Kotlin的if...else...語(yǔ)句基本用法同Java一樣,如下面所示:
if(flag){
tx.setText("Kotlin")
}
else{
tx.setText("Java")
}
因?yàn)镵otlin支持分支語(yǔ)句返回字符串史隆,所以我們可以寫(xiě)成下面的格式魂务。
var str = ""
str = if(flag) "Kotlin" else "Java"
1.2多路分支
Kotlin推出新的when/else 來(lái)替代Java的switch/case語(yǔ)句,處理多路分支的條件判斷泌射,下面看具體例子粘姜。
when(count){
1 -> str = "Kotlin"
2 -> str = "Java"
else -> str = "C"
}
- 關(guān)鍵字switch被when取代
- 判斷語(yǔ)句“case 常量值” 被新語(yǔ)句“常量值 ->”取代
- 每個(gè)分支后面的break語(yǔ)句被取消了,Kotlin默認(rèn)處理完一個(gè)分支就跳出多路語(yǔ)句熔酷。
- 關(guān)鍵字default被else取代孤紧。
- 以前Java在case后面只能跟常量,不能跟變量【苊兀現(xiàn)在kotlin去掉了這個(gè)限制号显,進(jìn)行分支處理時(shí)允許引入變量判斷臭猜,引入具體的運(yùn)算表達(dá)式也是可以的。
- Kotlin可以“in 開(kāi)始值...結(jié)束值...” “!in 開(kāi)始值...結(jié)束值...”來(lái)指定區(qū)間范圍押蚤。
when(count){
in 1..3 -> str = "Kotlin"
!in 5..9 -> str = "Java"
10,11,12 -> str = "C"
}
1.3類型判斷
在Java中我們判斷變量類型用instanceof蔑歌,但是在kotlin里我們使用is 來(lái)判斷變量的類型。
if(str is String){
...
}
2.循環(huán)處理
2.1遍歷循環(huán)
Kotlin循環(huán)遍歷具體語(yǔ)句“for(item in list)”
Kotlin中使用for(i in 數(shù)組變量.indices)來(lái)實(shí)現(xiàn)數(shù)組下標(biāo)的處理揽碘。indices表示數(shù)組變量的下標(biāo)數(shù)組次屠。
2.2條件循環(huán)
使用while進(jìn)行循環(huán)判斷
或者使用do/while循環(huán)判斷
2.3跳出多重循環(huán)
Kotlin通過(guò)加@標(biāo)記,我們可以直接從內(nèi)循環(huán)跳出外層循環(huán)雳刺。
3空安全
3.1Kotlin檢驗(yàn)字符串空值的方法
- isNullOrEmpty:為空指針或者字符串長(zhǎng)度為0時(shí)返回true劫灶,非空和空串都可調(diào)用
- isNullOrBlank:為空指針、字符串長(zhǎng)度為0或者全為空格時(shí)返回true掖桦,非空和空串都可調(diào)用
- isEmpty:字符串長(zhǎng)度為0時(shí)返回true本昏,只有非空字符串可以調(diào)用
- isBlank:字符串長(zhǎng)度為0或者全為空格時(shí)返回true,只有非空字符串可以調(diào)用
- isNotEmpty:字符串長(zhǎng)度大于0時(shí)返回true枪汪,只有非空字符串可以調(diào)用
- isNotBlank:長(zhǎng)度大于0且不是全空格時(shí)返回true涌穆,只有非空字符串可以調(diào)用
3.2聲明可空變量
在Kotlin中聲明可空變量如下:
var name:String?
- 聲明變量實(shí)例時(shí),在類型名稱后面加問(wèn)號(hào),表示該變量可以為空雀久。
- 調(diào)用變量方法時(shí)蒲犬,在變量名稱后面加問(wèn)號(hào),表示一旦變量為空就返回null岸啡。
- 新引用運(yùn)算符“?:”赫编,表示變量一旦為空巡蘸,就返回該運(yùn)算符右邊的表達(dá)式。
- 新引入運(yùn)算符“@匏汀悦荒!”,通知編譯器不做非空校驗(yàn)嘹吨。如果運(yùn)行時(shí)為空時(shí)拋出異常搬味。
4.等式判斷
4.1結(jié)構(gòu)相等
在Java中實(shí)現(xiàn)了equals函數(shù)的類,在Kotlin中都可以通過(guò)運(yùn)算符 “==” “蟀拷!=”進(jìn)行等式判斷碰纬。這種判斷不比較存儲(chǔ)地址,而是比較變量結(jié)構(gòu)內(nèi)部值是否相等的行為问芬,kotlin稱為結(jié)構(gòu)相等悦析,模樣相等。
4.2引用相等
在Kotlin中都可以通過(guò)運(yùn)算符 “===” “此衅!==”進(jìn)行等式判斷區(qū)分是否是同一內(nèi)存地址强戴。
- 基本數(shù)據(jù)類型亭螟,結(jié)構(gòu)相等和引用相等沒(méi)有區(qū)別
- 同一個(gè)類聲明的不同變量,屬性不等骑歹,結(jié)構(gòu)不相等预烙,引用不等
- clone聲明的變量,結(jié)構(gòu)相等道媚,內(nèi)容不等扁掸。
4.3 is和in
運(yùn)算符is和!is
校驗(yàn)變量是否是某種類型衰琐,寫(xiě)法如下
var result = count is Int
var result = count !is Int
運(yùn)算符in和也糊!in
校驗(yàn)數(shù)組是否存在此元素,寫(xiě)法如下
var result = count in nameArray
var result = count !in nameArray