if...else
????????在 Kotlin 中植旧,if...else是一個表達(dá)式,即它會返回一個值离唐。
// 作為表達(dá)式
val max = if (a > b) a else b
????????if 的分支可以是代碼塊病附,最后的表達(dá)式作為該塊的值:
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
注意:
- if...else可以達(dá)到和三目運算符相同的效果,所以kotlin就不需要三目運算符
- if...else的返回值是可以忽略的亥鬓,忽略后就和java的語句沒什么差別
- 當(dāng)使用 if 作為表達(dá)式而不是語句(例如:返回它的值或者把它賦給變量)完沪,該表達(dá)式需要有 else 分支。
(取消了三目運算符對不少人應(yīng)該是好消息吧贮竟,帶有返回值也是很棒的設(shè)計)
when
????????在 Kotlin 中丽焊,when取代了類 Java的 switch-case語句。when語句的形式入下:
when (x) {
//普通條件下咕别,沒有Java中的case和break語句
1 -> print("x == 1")
//多個條件有相同的處理時技健,可以把多個條件放在一起,用逗號分隔
2,3 -> print("x == 2 or x == 3")
//可以用任意表達(dá)式和函數(shù)(而不只是常量)作為分支條件
1+3 -> print("x == 4")
add(1+4) -> print("x == 5")
//可以檢測一個值在(in)或者不在(!in)一個區(qū)間或者集合中
in 6..10 -> print("x is in the 6~10")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
//這里的else相當(dāng)與Java的default語句
else -> {
print("x is neither 1 nor 2")
}
}
????????和if...else類似惰拱,when也是一個表達(dá)式雌贱,具有返回值啊送,滿足條件的分支中最后的表達(dá)式就是其返回值
var result = when (x % 2) {
0 -> {
println("x是偶數(shù)")
0
}
else -> {
println("x是奇數(shù)")
1
}
}
????????when還可以檢測一個值是(is)或者不是(!is)一個特定類型的值。注意: 由于智能轉(zhuǎn)換欣孤,你可以訪問該類型的方法與屬性而無需任何額外的檢測馋没。
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
????????可以不提供參數(shù),所有的分支條件都是簡單的布爾表達(dá)式降传,而當(dāng)一個分支的條件為真時則執(zhí)行該分支篷朵,從而取代if-else if鏈
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
????????自 Kotlin 1.3 起,可以使用以下語法將 when 的主語(subject婆排,譯注:指 when 所判斷的表達(dá)式)捕獲到變量中:
fun Request.getBody() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
(總之666声旺,這個when相比于java的簡直太強(qiáng)大了有沒有)
for
????????for 循環(huán)可以對任何提供迭代器(iterator)的對象進(jìn)行遍歷,這相當(dāng)于像 Java 中的 foreach 循環(huán)
Kotlin | Java |
---|---|
for (item in collection) print(item) |
for (int item in collection) System.out.print(item) |
????????Kotlin中段只,在數(shù)字區(qū)間上迭代腮猖,請使用區(qū)間表達(dá)式替代java中的for(;;)
語句:
for (i in 1..3) {
println(i)
}
for (i in 6 downTo 0 step 2) {
println(i)
}
????????通過索引遍歷一個數(shù)組或者一個 list,可以這么做:
for (i in array.indices) {
println(array[i])
}
//可以用庫函數(shù) withIndex
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
(這個for配合一些關(guān)健字可以實現(xiàn)一些花式遍歷呢)
while和do...while
????????while和do...while的用法和java一致
(不容易啊赞枕,終于看到一個和java用法一致的了)