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()
}
目录
相关文章
使用markdown-it对markdown进行一个实时解析
# 引言 大家应该都接触过markdown笔记吧,我们常常见到很多能写文章的网页提供了一个实时的markdown解析的功能----即我们在一侧写下markdown语法,右边能够实时解析,并将解析后的markdown语法渲染到右侧页面上。非常炫酷实用,那么这是如何实现的呢?今天我们来一起探究一下。 # 开始 首先,我们这个演示学习在Vue3+TypeScript下使用的,所以我们预先建议准备一个Vue3+Typescript工程。 对于markdown的解析,我们可以使用`markdown-it`来进行解析。 比如,我们在左侧设置一个输入框,接收用户markdown输入,我们通过`ma
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
R语言如何用潜类别混合效应模型(LCMM)分析抑郁症状
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
545 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
Python
tinytag-用于读取MP3,OGG,FLAC和Wave文件的音乐元数据的python库
tinytag是一个python库,用于使用python读取MP3,OGG,OPUS,MP4,M4A,FLAC,WMA和Wave文件的音乐元数据。特征: - 读取音频文件的标签,长度和封面图像 - 支持的格式:(MP3 (ID3 v1, v1.1, v2.2, v2.3+)、Wave/RIFF、OGG、OPUS、FLAC、WMA、MP4/M4A/M4B) - 纯python,无依赖 - 支持python 2.7和3.4或更高版本 - 高测试覆盖率 - 仅几百行代码(只需将其包含在您的项目中即可!)
2391 0
tinytag-用于读取MP3,OGG,FLAC和Wave文件的音乐元数据的python库
|
安全 Ubuntu Linux
嵌入式Linux开发环境搭建之十一 --- Putty连接虚拟机Centos出现:Network error:Connection refused的解决方法
嵌入式Linux开发环境搭建之十一 --- Putty连接虚拟机Centos出现:Network error:Connection refused的解决方法
854 0
|
Web App开发 人工智能 JSON
VScode 插件 & 常用快捷键整理(含Chrome插件)
VScode 插件 & 常用快捷键整理(含Chrome插件)
816 0
|
Web App开发 弹性计算 负载均衡
阿里云acp考试时间、内容?阿里云ACP认证考试有什么经验?
相信大部分朋友都参加过各种考试吧,或者说以后工作可能会用到的各种含金量高的证件。那么阿里云acp考试时间、内容?阿里云ACP认证考试有什么经验?认证大使小编带大家了解一下几个问题。
1680 0
阿里云acp考试时间、内容?阿里云ACP认证考试有什么经验?
|
云安全 边缘计算 监控
|
Web App开发 编解码 缓存
2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕
直播,已经成为了“剁手党”们最喜闻乐见的一种购物形式。对直播体验的极致追求,也是淘宝技术人们长期的努力方向。为了提升用户购物体验,让直播更加丝滑,让剁手更快一些,在2020双十一期间,淘宝首次启用了阿里云CDN的GRTN全球实时传输网络。数据显示,和传统的HTTPFLV/RTMP方式相比,在启用了GRTN后,直播端到端的延时降低了83%。那么,GRTN到底是什么?其背后究竟隐藏了哪些核心技术?
11004 0
2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕

热门文章

最新文章