美文网首页
Kotlin基础语法--控制流

Kotlin基础语法--控制流

作者: Whyn | 来源:发表于2017-07-29 17:15 被阅读12次

    If表达式

    Kotlin中的 if 不同Java,它不仅仅只能作为一个判断语句,还能作为表达式,即它能返回一个值.

    // 传统用法
    var max = a 
    if (a < b) max = b
    
    // With else 
    var max: Int
    if (a > b) {
        max = a
    } else {
        max = b
    }
    

    在Kotlin中,没有三元运算符,但是可以使用 if 表达式完成三元运算符功能

    //Java中三元运算符
    int max = a > b ? a : b ;
    //Kotlin实现类似三元运算符功能
    var max = if (a > b) a else b
    

    注: Kotlin中 if 作为表达式,后面可接代码块,最后的表达式作为该块的返回值:

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

    注: 如果把 if 作为表达式使用,那么必须有 else 分支,这样才能确保 if 一定能返回一个值.

    When 表达式

    Kotlin中的 whenif 一样,既可以作为语句,也可以作为表达式.作为语句时,其相当于Java中的 switch ,作为表达式时,它的任何一个分支的代码块的最后一句表达式作为该分支的返回值,同时, when 作为表达式使用必须有 else 分支存在.

    //作为语句
    fun printAge(age: Int, adult: Array<Int>) {
        when (age) {
            1 -> println("age 1")
            2, 3, 4, 5 -> println("small children")
            in 15..20 -> println("teenagers")
            in adult -> println("adults")
            !in 50..100 -> println("not elders")
        }
    }
    
    //作为表达式
    fun hasPrefix(x: Any) = when (x) {
        is String -> x.startsWith("prefix")
        else -> { //注意这个块
            false
        }
    }
    

    when 也可以用来取代if-else if链。 如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支

    when {
        x.isOdd() -> print("x is odd")
        x.isEven() -> print("x is even")
        else -> print("x is funny")
    }
    

    For 循环

    for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下:

    for (item in collection) {
    //do your thing
    }
    
    for (index in arrays.indices)
       println(arrays[index])
    
    for ((index,value) in arrays.withIndex()){
      println("arrays[$index]=$value")
    }
    

    While 循环

    whiledo..while 与Java用法一致.

    循环中的break和continue

    Kotlin中的 breakcontinue 基础用法与Java类似,其余完整用法请参见返回和跳转

    本文内容摘自:控制流

    相关文章

      网友评论

          本文标题:Kotlin基础语法--控制流

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