Kotlin 逻辑控制

程序的逻辑控制

 if条件语句

Kotlin中的if语句相比于Java有一个额外的功能,它是可以有返回值的,返回值就是if语句每一个条件中最后一行代码的返回值。

fun largerNumber(num1: Int, num2: Int): Int {
    var value = 0
    if (num1 > num2) {
        value = num1
    } else {
        value = num2
    }
    return value
}
//Kotlin中的if语句相比于Java有一个额外的功能,它是可以有返回值的,
// 返回值就是if语句每一个条件中最后一行代码的返回值。因此,上述代码就可以简化成如下形式:
fun largerNumber2(num1: Int, num2: Int): Int {
    val value = if (num1 > num2) {
        num1
    } else {
        num2
    }
    return value
}
//if语句使用每个条件的最后一行代码作为返回值,并将返回值赋值给了value变量。
// 由于现在没有重新赋值的情况了,因此可以使用val关键字来声明value变量,最终将value变量返回。
//仔细观察上述代码,会发现value其实也是一个多余的变量,可以直接将if语句返回,这样代码将会变得更加精简,如下所示:
fun largerNumber3(num1: Int, num2: Int): Int {
    return if (num1 > num2) {
        num1
    } else {
        num2
    }
}
//当一个函数只有一行代码时,可以省略函数体部分,直接将这一行代码使用等号串连在函数定义的尾部。
// 虽然上述代码中的largerNumber()函数不止只有一行代码,但是它和只有一行代码的作用是相同的,
// 只是返回了一下if语句的返回值而已,符合该语法糖的使用条件。那么我们就可以将代码进一步精简:
fun largerNumber4(num1: Int, num2: Int) = if (num1 > num2) {
    num1
} else {
    num2
}
//还可以将上述代码再精简一下,直接压缩成一行代码:
fun largerNumber5(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

when条件语句

Kotlin中的when语句有点类似于Java中的switch语句,但它又远比switch语句强大得多。

when语句和if语句一样,也是可以有返回值的,因此我们仍然可以使用单行代码函数的语法糖。when语句允许传入一个任意类型的参数,然后可以在when的结构体中定义一系列的条件,格式是:
匹配值 -> { 执行逻辑 }
当执行逻辑只有一行代码时,{ }可以省略。
//if语句实现
fun getScore(name: String) = if (name == "Tom") {
    86
} else if (name == "Jim") {
    77
} else {
    0
}

//使用when语句的时候,现在我们将代码改成如下写法:
fun getScore2(name: String) = when (name) {
    "Tom" -> 86
    "Jim" -> 77
    else -> 0
}

//除了精确匹配之外,when语句还允许进行类型匹配
fun checkNumber(num: Number) {
    when (num) {
        is Int -> println("number is Int")
        is Double -> println("number is Double")
        else -> println("number not support")
    }
}
//is关键字就是类型匹配的核心,它相当于Java中的instanceof关键字。

//when语句还有一种不带参数的用法,虽然这种用法可能不太常用,但有的时候却能发挥很强的扩展性。
fun getScore3(name: String) = when {
    name == "Tom" -> 86
    name == "Jim" -> 77
    else -> 0
}
//Kotlin中判断字符串或对象是否相等可以直接使用==关键字,而不用像Java那样调用equals()方法。

//可能会觉得这种无参数的when语句写起来比较冗余,但有些场景必须使用这种写法才能实现。举个例子
fun getScore4(name: String) = when {
    name.startsWith("Tom") -> 86
    name == "Jim" -> 77
    else -> 0
}

循环语句

Kotlin也提供了while循环和for循环,其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别

Kotlin在for循环方面做了很大幅度的修改,Java中最常用的for-i循环在Kotlin中直接被舍弃了,而Java中另一种for-each循环则被Kotlin进行了大幅度的加强,变成了for-in循环

// 两端都是闭区间
val range = 0..10
// 左闭右开的区间
val range2 = 0 until 10
// step关键字 设置步长
val range3 = 0 until 10 step 2
// downTo关键字 降序的区间
val range4 = 10 downTo 1

for (i in range) {
    println(i)
}

 

 

posted @ 2023-01-13 09:39  草木物语  阅读(22)  评论(0编辑  收藏  举报