美文网首页
Kotlin——逻辑控制

Kotlin——逻辑控制

作者: 四喜汤圆 | 来源:发表于2020-04-06 22:43 被阅读0次

一、作用

必须的

二、概念

1.顺序语句

2.条件语句

Kotlin 中的条件语句分两种:ifwhen

(1)if
Kotlin 中的if和 Java 中的几乎没有区别。

fun largerNumber(num1: Int, num2: Int): Int {
    var value = 0
    if (num1 > num2) {
        value = num1
    } else {
        value = num2
    }
    return value
}

只有一点:Kotlin 中的if语句可以有返回值,返回值就是if语句中每一个条件中最后一行代码的返回值。

简化为:
fun largerNumber5(num1: Int, num2: Int): Int {
    return if (num1 > num2) {
        num1
    } else {
        num2
    }
}

再利用语法糖,当函数中只有一行代码时进行化简,简化为:

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) {
    num1
} else {
    num2
}
简化为:
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

(2)when
when类似于 Java 中的switch,但它比switch强大得多。

Java 中switch的缺点:首先:Java 中的switch只能传入整型或短于整型的变量作为条件,JDK 1.7 之后增加了对字符串变量的支持,但如果你的逻辑判断使用的并非上述几种类型的变量,那么switch并不适合你。其次:每个case之后都要主动加一个break,否则会依次执行下面的case,从而导致一些 bug。

Kotlin 解决了上述痛点,还增加了许多更加强大的新特性。

when允许传入任意类型的参数,当你的执行逻辑只有一行代码时,{} 可以省略

匹配值 -> {执行逻辑}  // 当你的执行逻辑只有一行代码时,{} 可以省略

一个查询成绩的方法

利用『单行代码函数』语法糖简化为:
fun getScore(name: String) = if (name == "Tom") {
    86
} else if (name == "Jim") {
    77
} else if (name == "Jack") {
    100
} else if (name == "Lily") {
    95
} else {
    0
}
使用 when 语法简化为:
fun getScore2(name: String) = when (name) {
    "Tom" -> 86
    "Jim" -> 77
    "Jack" -> 100
    "Lily" -> 95
    else -> 0
}

when允许类型匹配

fun checkNumber(num: Number) {
    when (num) {
        is Int -> println("number is Int")
        is Double -> println("number is Double")
        else -> println("number is not support")
    }
}

when语句中还有一种不带参数的用法,虽然这种用法可能不太常用,但有时能发挥很强的拓展性。例如:『假设实现所有名字以 Tom 开头的人,分数都是86』

fun getScore3(name: String) =
        when {
            name.startsWith("Tom") -> 86
            name == "Jim" -> 77
            name == "Jack" -> 100
            name == "Lily" -> 95
            else -> 0
        }

3.循环语句

(1)while
和 Java 中的一样

(2)for

Java 中最常用的for-i直接被废弃掉了,for-each被 Kotlin 大幅度得加强,变成了for-in循环。

fun forTest() {
    for (i in 0..10) {
        println(i)
    }
}

fun forTest2() {
    for (i in 0 until 10 step 2) {
        println(i)
    }
}

fun forTest3() {
    val rang = 10 downTo 1
    for (i in 10 downTo 1) {
        println(i)
    }
}

4. 小知识点

(1)is
相当于 Java 中的instanceof

(2)Number
这是 Kotlin 内置的一个抽象类,IntDoubleFloat等都是它的子类。

(3)==
Kotlin 中判断字符串或对象是否相等可以直接使用==关键字

(4)..创建区间

  • 两端闭区间
[0,10]
val range=1..10
  • 左闭右开区间
[0,10)
val range = 0 until 10
  • 降序空间
[1,10]降序
val rang = 10 downTo 1

相关文章

网友评论

      本文标题:Kotlin——逻辑控制

      本文链接:https://www.haomeiwen.com/subject/sfpiphtx.html