Kotlin 控制流

本文深入探讨Kotlin中的控制流结构,包括if表达式的灵活性、when表达式的强大、for和while循环的使用,以及return、break和continue的跳转机制。通过实例讲解,帮助读者掌握Kotlin控制流的关键特性。
if 表达式

在 kotlin 中,if 是一个表达式,即他会返回一个值,因此就不需要三元运算符(条件? 然后:否则) .

fun getMax(): Int {
    var a: Int = 1
    var b: Int = 2
    return if (a > b) a else b
}

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

fun getMaxCode(a: Int, b: Int): Int {
    val max = if (a > b) {
        println("A is max")
        11     // 作为返回值
    } else {
        println("B is max")
        22     // 作为返回值
    }
    return max     // 最后的返回值 max 取值为 11 或 22
}
when 表达式

when 取代了 Java 中的 switch 关键字, when 将他的参数与所有的分支条件顺序比较,直到 某个分支满足条件,满足条件的分支后,会自动终止 when 语句的执行,因此,并不需要像 switch 语句的第一个满足条件的分支的后面添加 break.

fun testWhen(x: Int) {
    when (x) {
        1 -> {      // 如果分支中是多条语句,则需要使用 {} 
            println("x = 1")
            println("1111111")
        }
        2 -> println("x = 2")
        else -> {
            println("x is neither 1 or 2")
        }
    }
}

如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用 逗号 分割。

fun testWhen1(x:Int) {
    when (x) {
        1,2 -> println("the x is 1 or 2")
        else -> {
            println("x is neither 1 or 2")
        }
    }
}

也可以检测一个值在 (in) 或不在 (!in) 一个区间或集合中

fun testWhen3(num: Int) {
    when (num) {
        in 1..10 -> println("num is in 1..10")
        !in 10..20 -> println("num is outside the range")
        else -> println("none of above")
    }
}
for 循环

for 循环可以对任何提供迭代器的对象进行遍历,这相当于 java 中的 foreach 循环。

fun testFor1() {
    // 声明一个数组
    var itemsArray = arrayOf(1, 2, 3, 4, 5)
    // 声明一个 list
    var itemsList = listOf<String>("apple", "orange")
    for (item: Int in itemsArray) {
        println("the array data : $item")
    }
    for(index in itemsArray.indices) {
        println("the index $index data is  ${itemsArray[index]}")
    }

    for (item: String in itemsList) {
        println("the array data : $item")
    }
}
While 循环

while 与 do… while 和 Java 中的用法是一样的。

fun testWhile(x: Int) {
    var num = x
    while (num > 0) {
        num--
        println("num  = $num ")
    }
}
fun testDoWhile() {
    var num: Int = 10;
    do {
        num--
        println("num is $num")
    } while (num > 0)
}

返回和跳转

kotlin 中有三种结构化跳转表达式

  • return : 默认从最直接包围他的函数或匿名函数返回‘
  • break : 终止最直接包围他的循环。
  • continue : 继续下一次最直接包围他的循环。

在 kotlin 中任何表达式都可以用标签 label 来标记,标签的格式为标识符后跟 @ 符号,

fun testLabel() {
    loop@ for (i in 1..10) {     // 使用 loop@ 标记外层循环
        for (j in 1..i) {
            if (i == 9) {
                break@loop       // 跳出外层循环       
            }
            print("$j * $i = ${i * j}   ")

        }
        println()
    }
}
标签处返回

kotlin 有函数字面量,局部函数和对象表达式,因此 kotlin 的函数可以被嵌套

fun testReturn() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return
        print("$it ,")
    }
}
// 1 ,2 ,

// 这个 return 表达式从最直接包围他的函数 testReturn 中返回,如果我们需要从 lambda 表达式中返回,我们必须给他加标签并用 “限制return” 
fun testReturn1() {
    listOf(1, 2, 3, 4, 5).forEach  lit@{
        if (it == 3) return@lit
        print("$it ,")
    }
}
// 1 ,2 ,4 ,5 ,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值