Kotlin - 分支与循环

简介: Kotlin - 分支与循环

本系列学习教程笔记属于详细讲解Kotlin语法的教程,需要快速学习Kotlin语法的小伙伴可以查看“简洁” 系列的教程

快速入门请阅读如下简洁教程:
Kotlin学习教程(一)
Kotlin学习教程(二)
Kotlin学习教程(三)
Kotlin学习教程(四)
Kotlin学习教程(五)
Kotlin学习教程(六)
Kotlin学习教程(七)
Kotlin学习教程(八)
Kotlin学习教程(九)
Kotlin学习教程(十)

imgKotlin - 分支与循环

#分支语句

Kotlin 中的分支语句有两种,分别是 if...elsewhen

#if 表达式

Kotlin 可以像 Java 那样,使用 if...else 语句,通过判断条件来修改变量的值:

var name = ""
if (local == "en") {
    name = "lqr"
} else {
    name = "吴彦祖"
}

但这种写法还不够简洁,Kotlin 对 if...else 进行发加强,支持 if表达式 ,可以对上述代码进行简化:

val name = if (local == "en") "lqr" else "吴彦祖"

Kotlin 中没有三元运算符,不过可以使用 if 表达式来处理。

#when 表达式

Kotlin 中的 when 相当于 Java 中的 switchwhen 语句用于处理多分支条件判断,代码更清晰:

val x = 5
when (x) {
    5 -> println("x is 5")
    is Int -> println("Hello $x")
    in 1..100 -> println("$x is in 1..100")
    !in 1..100 -> println("$x is not in 1..100")
    args[0].toInt() -> println("x == args[0]")
}

可以看到 when 的条件分支很强大,除了支持值判断,甚至还支持表达式判断。与 if表达式 一样,Kotlin 也支持 when表达式

val hero = when (local) {
    "en" -> "Hero"
    "zh" -> "英雄"
    "fr" -> "Un héros"
    "de" -> "Held"
    else -> "未知"
}
println(hero)

与 Java 的 switch 相比,Kotlin 的 when 更加强大:

  • 加强版 switch,支持任意类型
  • 支持纯表达式条件分支(类似 if)
  • when表达式 要求完备性,需要将所有情况都列出来

#循环语句

Kotlin 中的循环语句大体有两种:for循环while循环

#for 循环

基本写法:for(element in elements)...

for (arg in args) {
    println(arg)
}

for 循环背后的运行机制是先通过 args.iterator() 获取到迭代器 Iterator,再结合迭代器的 next()hasNext() 来处理数组中的元素,所以循环的关键点是 Iterator

Java 中 for 循环的原理也是迭代器,但不同的是,Java 的数组需要实现 Iterable<T> 接口,并实现iterator(),而 Kotlin 中则是任意类重写 operator fun iterator()

数组 Array 支持在 for 循环的同时获取索引值:

// 带索引的for循环
for ((index, value) in args.withIndex()) {
    println("$index : $value")
}

// 上面写法等价于下面写法
for (indexValue in args.withIndex()) {
    println("${indexValue.index} : ${indexValue.value}")
}

数组 ArraywithIndex() 方法返回的是 Iterable<IndexedValue<T>>,其中 IndexedValuedata class ,支持使用 () 提取属性:

public data class IndexedValue<out T>(public val index: Int, public val value: T)

#while 循环

除了 for 循环,Kotlin 还支持 while 循环,while 循环格式分两种,两者区别如下:

  • while:先判断再执行
  • do-while:先执行再判断
var x = 5
while (x > 0) {
    print("$x ") // 5 4 3 2 1
    x--
}

var x = 5
do {
    print("$x ") // 5 4 3 2 1
    x--
} while (x > 0)

#跳过和终止循环

Kotlin 也支持跳过和终止循环语句的指令,分别是:

  • continue :跳过当前循环
  • break :终止当前循环
val args = intArrayOf(1, 2, 3, 4, 5)
for (arg in args) {
    if (arg == 2) continue
    if (arg == 4) break
    print("$arg ") // 1 3
}

开发中也常用 return 来终止循环,但它与 break 不同的是,return 实际上是中止方法的执行。

当有多层循环嵌套需要根据条件 跳过或终止内外套循环语句时,可以使用标签:

val args = intArrayOf(1, 2, 3, 4, 5)
Outter@ for (arg in args) {
    println("outter: $arg")
    var i = arg
    print("inner: ")
    Inner@ while (i > 0) {
        if (arg == 2) break@Inner // 当外循环元素为2时,跳过while,进行下次for
        if (arg == 4) break@Outter // 当外循环元素为3时,直接跳出for
        print("$i ")
        i--
    }
    println()
}
目录
相关文章
|
7天前
|
云安全 监控 安全
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1359 8
|
6天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
439 13
|
18天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1239 43
|
18天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
1094 86
大厂CIO独家分享:AI如何重塑开发者未来十年
|
1天前
|
存储 弹性计算 容灾
阿里云服务器ECS自定义购买流程:超详细新手入门教程
本文详细介绍阿里云服务器ECS自定义购买全流程,涵盖付费模式、地域选择、网络配置、实例规格、镜像系统、存储、公网IP、带宽计费及安全组设置等关键步骤,适合新手入门参考,助你轻松完成云服务器选购与部署。
180 121