FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • Kotlin - 数据类型
  • Kotlin - 类与构造器
  • Kotlin - 空类型和智能类型转换
  • Kotlin - 区间与数组
  • Kotlin - 常量与变量
  • Kotlin - 函数与Lambda表达式
  • Kotlin - 类成员
  • Kotlin - 运算符与中缀表达式
  • Kotlin - 分支与循环
    • 分支语句
      • if 表达式
      • when 表达式
    • 循环语句
      • for 循环
      • while 循环
      • 跳过和终止循环
  • Kotlin - 参数与异常
  • Kotlin - 面向对象之抽象类与接口
  • Kotlin - 面向对象之继承与实现
  • Kotlin - 类及成员的可见性
  • Kotlin - 伴生对象与静态成员
  • Kotlin - 方法重载与默认参数
  • Kotlin - 扩展成员
  • Kotlin - 属性代理
  • Kotlin - 数据类
  • Kotlin - 内部类
  • Kotlin - 枚举与密封类
  • Kotlin - 高阶函数与函数引用
  • Kotlin - 常见高阶函数
  • Kotlin - 作用域函数
  • Kotlin - 尾递归优化
  • Kotlin - 函数式编程
  • Kotlin - 改良设计模式 - 工厂模式
  • Kotlin - 改良设计模式 - 构建者模式
  • Kotlin - 改良设计模式 - 观察者模式
  • Kotlin - 改良设计模式 - 策略模式
  • Kotlin - 改良设计模式 - 迭代器模式
  • Kotlin - 改良设计模式 - 责任链模式
  • Kotlin - 改良设计模式 - 装饰者模式
  • 《Kotlin快速入门进阶》
GitLqr
2021-01-18
目录

Kotlin - 分支与循环

欢迎关注微信公众号:[FSA全栈行动 👋]

# 分支语句

Kotlin 中的分支语句有两种,分别是 if...else 和 when。

# 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 中的 switch,when 语句用于处理多分支条件判断,代码更清晰:

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}")
}

数组 Array 的 withIndex() 方法返回的是 Iterable<IndexedValue<T>>,其中 IndexedValue 是 data 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()
}
#if-else#when#for#while#iterator
Kotlin - 运算符与中缀表达式
Kotlin - 参数与异常

← Kotlin - 运算符与中缀表达式 Kotlin - 参数与异常→

最近更新
01
Flutter - Xcode16 还原编译速度
04-05
02
AI - 免费的 Cursor 平替方案
03-30
03
Android - 2025年安卓真的闭源了吗
03-28
更多文章>
Theme by Vdoing | Copyright © 2020-2025 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×