美文网首页
Kotlin流程控制——分支结构

Kotlin流程控制——分支结构

作者: 程序员丶星霖 | 来源:发表于2019-06-28 15:05 被阅读0次

Kotlin提供了两种基本的流程控制结构:分支结构和循环结构

  • 分支结构用于实现根据条件来选择性地执行某段代码;
  • 循环结构用于实现根据循环条件重复执行某段代码。

如果没有流程控制,Kotlin程序的语句是一个顺序执行流,从上向下一次执行每条语句。

Kotlin提供了两种分支控制结构:if分支和when分支

一般来说,当条件较为简单且可能的情况很少时,使用if分支;当条件比较复杂且可能的情况很多时,可以考虑使用when分支。

一、if分支

Kotlin的if分支即可作为语句使用,也可作为表达式使用。

Kotlin的if语句有如下三种形式:

第一种形式:

    var age=26
    if (age > 20) {
        println("年龄已经大于20岁了")
    }

第二种形式:

    var age=26
    if (age > 20) {
        println("年龄已经大于20岁了")
    }else{
        println("年龄小于等于20岁")
    }

第三种形式:

    var age=26
    if (age>60){
        println("老年人")
    }else if(age>40){
        println("中年人")
    }else if (age > 20) {
        println("青年人")
    }

if else语句有一条基本规则:总是优先把包含范围小的条件放在前面处理。

二、if表达式

Kotlin的if分支还可以作为表达式使用。

    var age=26
    var str= if (age>20) "age大于20" else if (age<20) "age小于20" else "age等于20"
    println(str)

输出结果:

age大于20

if表达式的分支也可以使用花括号括起来的代码块,此时代码块的最后一个表达式的值将作为整个代码块的值

    var age=26
    var str= if (age>20){
        println("大于20的分支")
        "age大于20"
    }else if (age < 20) {
        println("小于20的分支")
        "age小于20"
    }else{
        println("else的分支")
        "age等于20"
    }
    println(str)

输出结果:

大于20的分支
age大于20

三、when分支语句

Kotlin的when分支取代了Java原有的switch语句。

    var score='B'
    when(score){
        'A'-> println("优秀")
        'B'-> println("良好")
        'C'-> println("中")
        'D'-> println("及格")
        else-> println("不及格")
    }

when分支其实就是switch分支的简化。

  • 不需要使用case关键字;
  • case值后的冒号改为使用箭头(->);
  • default改为更有意义、更明确的else。

如果when分支包含多条语句,则需要使用花括号将这些语句括成一个代码块。

var score='B'
    when(score){
        'A'-> {
            println("优秀")
            println("百尺竿头更进一步")
        }
        'B'-> {
            println("良好")
            println("不拼一把,你不知道自己能行")
        }
        'C'-> println("中")
        'D'-> println("及格")
        else-> {
            println("不及格")
            println("下次加油")
        }
    }

输出结果:

良好
不拼一把,你不知道自己能行

when分支的3个改进:

  • when分支可以匹配多个值;
  • when分支后的值不要求是常量,可以是任意表达式;
  • when分支对条件表达式的类型没有任何要求。
    var score='B'
    when(score){
        'A','B'-> {
            println("优秀")
            println("百尺竿头更进一步")
        }
        'C','D'-> println("中")
        else-> {
            println("不及格")
            println("下次加油")
        }
    }

.
输出结果:

优秀
百尺竿头更进一步

when分支后的值可以是任意表达式。

    var score='B'
    var str="EFGH"
    when(score){
        str[0]-4,str[1]-4-> {
            println("优秀")
            println("百尺竿头更进一步")
        }
        str[2]-4,str[3]-4-> println("中")
        else-> {
            println("不及格")
            println("下次加油")
        }
    }

输出结果:

优秀
百尺竿头更进一步

when分支的条件表达式可以是任意类型。

    var data=Date()
    when(data){
        Date()-> {
            println("优秀")
            println("百尺竿头更进一步")
        }
        else-> {
            println("不及格")
            println("下次加油")
        }
    }

输出结果:

优秀
百尺竿头更进一步

四、when表达式

when分支也可作为表达式。如果when分支被当做表达式,符合条件的分支的代码块的值就是整个表达式的值。

当when语句作为表达式使用时,when表达式也需要有一个返回值,所以when分支表达式必须有else分支,除非所有的可能情况都已经被覆盖了。

 var score = 'B'
    val str=when(score){
        'A'->{
            println("百尺竿头更进一步")
            "优秀"
        }
        'B'->{
            println("不拼一把,没怎么能知道自己的能力")
            "良好"
        }
        'C'->"中"
        'D'->"及格"
        else->{
            println("下次再来")
            "不及格"
        }
    }

    println(str)

输出结果:

不拼一把,没怎么能知道自己的能力
良好

五、when分支处理范围

通过使用in、!in运算符,可以使用when分支检查表达式是否位于指定区间或集合中。

    val age = Random().nextInt(100)
    println(age)
    var str = when (age) {
        in 10..25->"当时年少青衫薄"
        in 26..50->"风景依稀似去年"
        in 51..80->"醉听清吟胜管弦"
        else->"其他"
    }
    println(str)

输出结果:

19
当时年少青衫薄

六、when分支处理类型

通过使用is、!is运算符检查表达式是否为指定类型。

fun main(args: Array<String>) {
    var inputPrice = 26
    println(realPrice(inputPrice))
}

fun realPrice(inputPrice: Any) = when (inputPrice) {
    is String -> inputPrice.toDouble()
    is Int -> inputPrice.toDouble()
    is Double -> inputPrice
    else -> 0.0
}

输出结果:

26.0

七、when条件分支

when分支还可以用来取代if...else if链。

    val ln= readLine()
    if (ln != null) {
        when{
            ln.matches(Regex("\\d+"))-> println("您输入的全是数字")
            ln.matches(Regex("[a-zA-Z]+"))->println("您输入的全是字母")
            ln.matches(Regex("[a-zA-Z0-9]+"))->println("您输入的是字母和数字")
            else-> println("您输入的包含特殊字符")
        }
    }

输出结果:

6545电饭锅
您输入的包含特殊字符

学海无涯苦作舟

我的微信公众号.jpg

相关文章

  • [JS基础]笔记四

    js流程控制语句 流程控制 顺序结构、分支结构、循环结构 分支结构 if 分支结构 if else 双分支结构语句...

  • Kotlin流程控制——分支结构

    Kotlin提供了两种基本的流程控制结构:分支结构和循环结构。 分支结构用于实现根据条件来选择性地执行某段代码; ...

  • 3.Java流程控制

    程序流程控制 流程控制语句: 顺序结构:是程序的默认结构 分支结构 循环结构 分支结构 if 根据判定的结果(真或...

  • Kotlin——流程控制

    与Java类似,Kotlin同样提供了两种基本的流程控制结构:分支结构和循环结构 顺序结构 在任何编程语言中最常见...

  • Axure系列教程(三):流程图之if和else

    流程图可以引申为流程控制,流程控制又分为顺序结构,分支结构,循环结构。今天所说的if和else是属于分支结构(选择...

  • 流程控制

    分支结构 Kotlin 提供了两种常见的分支控制结构: if分支和 when 分支 。其中 if分支使用布尔表达式...

  • 003-控制流程语句if,elseif,switch,for,w

    控制流程语句 分支结构 循环结构 分支结构 简单的if结构 if...else结构 多重if结构 嵌套if结构 总...

  • Java知识之流程控制

    Java流程控制框架图 流程控制 一. 循环结构二. 分支结构三. 顺序结构 循环结构 for循环,for-eac...

  • Day04_if_switch

    选择结构 流程控制 分类 顺序结构 分支结构(if, switch) 循环结构(for, while, do .....

  • 编写Shell脚本---流程控制语句

    [TOC] 流程控制语句 1 if条件测试语句 if语句分为三种结构: 单分支结构 双分支结构 多分支结构 1.1...

网友评论

      本文标题:Kotlin流程控制——分支结构

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