3:kotlin 逻辑控制(Control flow)

像其他语言一样,kotlin也有循环和逻辑控制

条件判断(Conditional expressions)

kotlin使用ifwhen来进行条件判断

如果纠结选择if还是when,建议使用when,因为它更能提高程序的健壮性

if

普通写法

kotlin 复制代码
fun main() {
    val d: Int
    val check = true

    if (check) {
        d = 1
    } else {
        d = 2
    }
 
    println(d) // 1
}

简单写法

kotlin中没有? :形式的三元表达式

kotlin 复制代码
fun main() {
    val a = 1
    val b = 2
    val res = if (a > b) a else b
    println(res) // 2
}

when

当有多个条件分支时使用when

条件和执行的逻辑用->分割

kotlin 复制代码
fun main() {
    val obj = "Hello"

    when (obj) {
        "1" -> println("One")   // 如果 obj == "1",执行当前分支
        "Hello" -> println("Greeting")  // 如果 obj == "Hello",执行当前分支
        else -> println("Unknown")  // 如果上边的所有分支都不符合,则执行当前分支
    }
    // Greeting
}

注意执行的顺序是从上而下,如果有一个条件满足了则不会进行下边的判断了

接收返回值的when

kotlin 复制代码
fun main() {
    val obj = "Hello"

    val result = when (obj) {
        "1" -> "One"
        "Hello" -> "Greeting"
        else -> "Unknown"
    }
    println(result) // Greeting
}

一般情况下,else分支是必须的,除非编译器检测到上边的条件覆盖了所有可能的情况

除了上边的匹配字符串,还可以使用条件表达式

kotlin 复制代码
fun main() {
    val temp = 18

    val description = when {
        temp < 0 -> "very cold"
        temp < 10 -> "a bit cold"
        temp < 20 -> "warm"
        else -> "hot"
    }
    println(description) // warm
}

范围(Range)

学习循环之前先来看一下怎么创建一个Range

常见的创建Range的方式是使用..

  • 1..4 - 1,2,3,4
  • 1..<4 - 1,2,3
  • 4 downTo 1 - 4,3,2,1
  • 1..5 step 2 - 1,3,5
  • 'a'..'d' - 'a','b','c','d'
  • 'z' downTo 's' step 2 - 'z','x','v','t'

循环(Loops)

编程中最常见的两种循环结构是forwhile。使用for迭代一系列值并执行操作。使用while继续操作,直到满足特定条件。

for

kotlin 复制代码
fun main() {
    for (number in 1..5) {
        print(number)
    }
// 12345
}
kotlin 复制代码
fun main() {
    val cakes = listOf("carrot", "cheese", "chocolate")
    for (cake in cakes) {
        println("Yummy, it's a $cake cake!")
    }
//    Yummy, it's a carrot cake!
//    Yummy, it's a cheese cake!
//    Yummy, it's a chocolate cake!
}

while

while有两个运行方式,一种是简单的while循环

kotlin 复制代码
fun main() {
    var cakesEaten = 0
    while (cakesEaten < 3) {
        println("Eat a cake $cakesEaten")
        cakesEaten++
    }
//    Eat a cake 0
//    Eat a cake 1
//    Eat a cake 2
}

另一种是do-while

kotlin 复制代码
fun main() {
    var cakesBaked = 0
    do {
        println("Bake a cake $cakesBaked")
        cakesBaked++
    } while (cakesBaked < 3)
//    Bake a cake 0
//    Bake a cake 1
//    Bake a cake 2
}

简单while先判断条件,如果满足再去执行{}内中内,直到条件不满足为止。do-while先执行一次{}中的内容,再去判断条件。

相关推荐
FunnySaltyFish18 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker1 天前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker2 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z4 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream5 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam5 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc6 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景6 天前
kotlin协程学习小计
android·kotlin