本文整理自:https://chiclaim.blog.csdn.net/article/details/88624808
一. when語句
在 Java 中有 switch 語句,在 Kotlin 中使用 when 來代替 switch
1) when 的基本語法
when(parameter){
branch1 -> logic
branch2 -> logic
}
when 括號裏是參數,參數是可選的。箭頭(->) 左邊是條件分支,右邊是對應的邏輯體
when 不需要向 switch 那樣需要加上 break 語句,符合條件自動具有 break 功能
如果邏輯體代碼比較多,可以放到花括號({})裏:
when(parameter){
branch1 -> {
//...
}
branch1 -> {
//...
}
}
如果要組合多個分支,可以使用逗號(,)分隔分支:
when(parameter){
branch1,branch1 -> {
//...
}
}
2) 枚舉類對象作爲 when 參數
fun getMnemonic(color: Color) = when (color) {
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
}
需要注意的是,when 使用枚舉對象作爲參數,需要把該枚舉類的所有對象列舉完
所以 枚舉對象作爲 when 參數不需要 else 分支
3) 任意對象作爲 when 參數
Kotlin 中的 when 比 Java 中的 switch 功能更強大
Java 的 switch 參數只能是 枚舉常量、字符串、整型或整型的包裝類型(浮點型不可以)
Kotlin 的 when 可以是任意對象:
fun mix(c1: Color, c2: Color) = when (setOf(c1, c2)) {
setOf(RED, YELLOW) -> ORANGE
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
//需要處理 其他 情況
else -> throw Exception("Dirty color")
}
4) 無參數的 when 表達式
上面的 mix 函數比較低效,因爲每次比較的時候都會創建一個或多個 set 集合
如果該函數調用頻繁,會創建很多臨時對象
可以使用無參的 when 表達式來改造下:
fun mixOptimized(c1: Color, c2: Color) = when {
(c1 == RED && c2 == YELLOW) || (c1 == YELLOW && c2 == RED) ->
ORANGE
(c1 == YELLOW && c2 == BLUE) || (c1 == BLUE && c2 == YELLOW) ->
GREEN
(c1 == BLUE && c2 == VIOLET) || (c1 == VIOLET && c2 == BLUE) ->
INDIGO
else -> throw Exception("Dirty color")
}
無參數的 when 表達式的條件分支必須是 boolean 類型
5) 智能類型轉換(smart casts)
在 Java 中對某個對象進行類型轉換的時候時候,需要通過 instanceof 來判斷是否可以被強轉
void test(Object obj) {
if (obj instanceof String) {
String str = (String) obj;
str.substring(0, str.length() / 2);
}
//...
}
Kotlin 通過 is 關鍵字來判斷類型,並且編譯器會自動幫你做類型轉換
fun test(obj: Any) {
if (obj is String) {
// 不需要手動做類型轉換操作
obj.substring(0, obj.length / 2)
}
//...
}
二. if判斷
if 表達式 用於條件判斷,在 Kotlin 中 如果判斷分支比較多,通常使用 when 來替代 if
fun test(obj: Any) {
when (obj) {
is String -> obj.substring(0, obj.length / 2)
is Type2 -> ignore
is Type3 -> ignore
}
}
三. while循環
Kotlin 中的 while 和 do…while 循環和 Java 沒有什麼區別
while (condition) {
/*...*/
}
do {
/*...*/
} while (condition)
四. for循環
for 循環的語法和 Java 中的循環還是有些區別
// Java for 循環
for (int i = 0; i <= 100; i++) {
System.out.println(i);
}
// 對應 Kotlin 版本
for(i in 0..100){
println(i)
}
使用 … 操作符 表示一個區間,該區間是閉區間,包含開始和結束的元素
然後使用 in 操作符來遍歷這個區間
這個區間是從小到大的,如果開始的數字比結尾的還要大,則沒有意義
如果想要表示 半閉區間 ,即只包含頭部元素,不包含尾部
可以使用 until 操作符:
for(i in 0 until 100){
println(i)
}
如果想要倒序遍歷,可以使用 downTo 關鍵字:
for(i in 100 downTo 0){
println(i)
}
遍歷的時候 步長(step) 默認是 1,可以通過 step 關鍵字來指定步長
for( i in 100 downTo 0 step 2){
println(i)
}
操作符 … 和 downTo 表示區間都是閉區間,包含首尾元素的