又停更了好幾天,今天來(lái)說(shuō)一下Kotlin的控制流部分的內(nèi)容
流程控制
if表達(dá)式
先來(lái)傳統(tǒng)的用法
var max = a
if(a>b)
max =b
//帶else
var max: Int
if(a>b)
max = a
else
max = b
從這可以看出跟Java的區(qū)別就是少了大括號(hào)
然后還可以作為表達(dá)式來(lái)寫(xiě)
var max = if (a>b) a else b
這樣寫(xiě)就可以比傳統(tǒng)用法看著簡(jiǎn)潔了不少
when表達(dá)式
最簡(jiǎn)單的用法是這樣
when (x) {
1 -> print ("x == 1")
2 -> print ("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
when會(huì)對(duì)所有的分支進(jìn)行檢查直到有一個(gè)條件滿足疾宏。when 可以用做表達(dá)式或聲明吹泡。如果用作表達(dá)式的話洲拇,那么滿足條件的分支就是總表達(dá)式棉饶。如果用做聲明拥褂,那么分支的的的值會(huì)被忽略求橄。(像 if 表達(dá)式一樣今野,每個(gè)分支是一個(gè)語(yǔ)句塊,而且它的值就是最后一個(gè)表達(dá)式的值)
在其它分支都不匹配的時(shí)候默認(rèn)匹配 else 分支罐农。如果把 when 做為表達(dá)式的話 else 分支是強(qiáng)制的条霜,除非編譯器可以提供所有覆蓋所有可能的分支條件。
如果有分支可以用同樣的方式處理的話涵亏,分支條件可以連在一起
when (x) {
0,1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
也可以用任意表達(dá)式作為分支的條件
when (x) {
parseInt(s) -> print("s encode x")
else -> print("s does not encode x")
}
也可以用 in 或者 !in 檢查值是否值在一個(gè)集合中:
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
也可以用 is 或者 !is 來(lái)判斷值是否是某個(gè)類型宰睡。注意,由于 smart casts 溯乒,你可以不用另外的檢查就可以使用相應(yīng)的屬性或方法夹厌。
val hasPrefix = when (x) {
is String -> x.startsWith("prefix")
else -> false
}
when 也可以用來(lái)代替 if-else if 。如果沒(méi)有任何參數(shù)提供裆悄,那么分支的條件就是簡(jiǎn)單的布爾表達(dá)式矛纹,當(dāng)條件為真時(shí)執(zhí)行相應(yīng)的分支:
when { x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
這個(gè)好像就要比Java中簡(jiǎn)潔不少,我之前在java中每次做判斷總是要寫(xiě)一長(zhǎng)串光稼。或南。
for循環(huán)
可以通過(guò)任何提供的迭代器進(jìn)行迭代
for ( item in collection)
print (item)
如果你想通過(guò) list 或者 array 的索引進(jìn)行迭代孩等,你可以這樣做:
for (i in array.indices)
print(array[i])
while循環(huán)
跟往常一樣,語(yǔ)法很簡(jiǎn)單
while(x >0) {
x--
}
do{
val y =retriveData( )
} while (y != null)
好啦 先寫(xiě)到這 晚點(diǎn)再加上返回和跳轉(zhuǎn)~