美文网首页
从java到Kotlin之-控制流

从java到Kotlin之-控制流

作者: CZKGO | 来源:发表于2020-06-08 16:18 被阅读0次

    if...else

            在 Kotlin 中,if...else是一个表达式,即它会返回一个值。

    // 作为表达式
    val max = if (a > b) a else b
    

            if 的分支可以是代码块,最后的表达式作为该块的值:

    val max = if (a > b) {
        print("Choose a")
        a
    } else {
        print("Choose b")
        b
    }
    

    注意:

    1. if...else可以达到和三目运算符相同的效果,所以kotlin就不需要三目运算符
    2. if...else的返回值是可以忽略的,忽略后就和java的语句没什么差别
    3. 当使用 if 作为表达式而不是语句(例如:返回它的值或者把它赋给变量),该表达式需要有 else 分支。

    (取消了三目运算符对不少人应该是好消息吧,带有返回值也是很棒的设计)

    when

            在 Kotlin 中,when取代了类 Java的 switch-case语句。when语句的形式入下:

    when (x) {
        //普通条件下,没有Java中的case和break语句
        1 -> print("x == 1") 
        //多个条件有相同的处理时,可以把多个条件放在一起,用逗号分隔
        2,3 -> print("x == 2 or x == 3")
        //可以用任意表达式和函数(而不只是常量)作为分支条件
        1+3 -> print("x == 4")
        add(1+4) -> print("x == 5")
        //可以检测一个值在(in)或者不在(!in)一个区间或者集合中
        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相当与Java的default语句
        else -> { 
            print("x is neither 1 nor 2")
        }
    }
    

            和if...else类似,when也是一个表达式,具有返回值,满足条件的分支中最后的表达式就是其返回值

    var result = when (x % 2) {
        0 -> {
            println("x是偶数")
            0
        }
        else -> {
            println("x是奇数")
            1
        }
    }
    

            when还可以检测一个值是(is)或者不是(!is)一个特定类型的值。注意: 由于智能转换,你可以访问该类型的方法与属性而无需任何额外的检测。

    fun hasPrefix(x: Any) = when(x) {
        is String -> x.startsWith("prefix")
        else -> false
    }
    

            可以不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支,从而取代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 所判断的表达式)捕获到变量中:

    fun Request.getBody() =
            when (val response = executeRequest()) {
                is Success -> response.body
                is HttpError -> throw HttpException(response.status)
            }
    

    (总之666,这个when相比于java的简直太强大了有没有)

    for

            for 循环可以对任何提供迭代器(iterator)的对象进行遍历,这相当于像 Java 中的 foreach 循环

    Kotlin Java
    for (item in collection) print(item) for (int item in collection) System.out.print(item)

            Kotlin中,在数字区间上迭代,请使用区间表达式替代java中的for(;;)语句:

    for (i in 1..3) {
        println(i)
    }
    for (i in 6 downTo 0 step 2) {
        println(i)
    }
    

            通过索引遍历一个数组或者一个 list,可以这么做:

    for (i in array.indices) {
        println(array[i])
    }
    //可以用库函数 withIndex
    for ((index, value) in array.withIndex()) {
        println("the element at $index is $value")
    }
    

    (这个for配合一些关健字可以实现一些花式遍历呢)

    while和do...while

            while和do...while的用法和java一致
    (不容易啊,终于看到一个和java用法一致的了)

    相关文章

      网友评论

          本文标题:从java到Kotlin之-控制流

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