位置:首页 > Kotlin > Kotlin 条件与循环控制入门:if、when、for 与区间表达式详解

Kotlin 条件与循环控制入门:if、when、for 与区间表达式详解

时间:2026-08-23  |  作者:清风无痕  |  阅读:0

目录

  1. if 为什么在 Kotlin 里更像表达式
  2. when 如何替代 switch-case
  3. Kotlin 循环控制有哪些常见写法
  4. 区间表达式怎么配合循环使用
  5. 小结

前言

很多刚从 Java 转到 Kotlin 的开发者,第一批遇到的语法差异往往就出现在流程控制上:`if` 不只是语句,`when` 也不是简单照搬 `switch-case`,循环写法看似熟悉,但区间遍历又多了一套更 Kotlin 化的表达方式。本文按“条件判断怎么写、什么时候能直接返回、循环遍历有哪些常用形式”这条线梳理一遍,并保留原始示例代码,帮助你快速建立可直接上手的判断标准。

很多刚从 Java 转到 Kotlin 的开发者,第一批遇到的语法差异往往就出现在流程控制上:`if` 不只是语句,`when` 也不是简单照搬 `switch-case`,循环写法看似熟悉,但区间遍历又多了一套更 Kotlin 化的表达方式。本文按“条件判断怎么写、什么时候能直接返回、循环遍历有哪些常用形式”这条线梳理一遍,并保留原始示例代码,帮助你快速建立可直接上手的判断标准。

if 为什么在 Kotlin 里更像表达式

在 Kotlin 中,if 不只是条件语句,它本身还是一个表达式,所以可以返回值。这个点和 Java 不同:Java 里的 if 只负责控制分支,而 Kotlin 里的 if 还能直接参与赋值、返回结果。

Kotlin 中 if 作为表达式的返回逻辑示意图
if 表达式的返回值逻辑用结构图展示 Kotlin 的 if 为什么能直接替代三目运算符。

带返回值的 if 表达式

当你在函数里根据条件返回不同结果时,Kotlin 可以直接把 if 的结果作为返回值。表达式的值,取的是分支代码块中最后一行表达式的结果。

fun maxOf(a: Int, b: Int): Int{
    if (a > b){
        return  a
    }else{
      return  b
    }
}

fun main() {
    val res = maxOf(10,22)
    
}

上面这种写法完全可用,但还没有体现 Kotlin 把 if 当表达式使用的优势。

Kotlin 为什么不需要三目运算符

因为 if 本身就能返回值,所以 Kotlin 不需要 Java、C 系语言里常见的三目运算符 xxx xxx : xxx。同样的逻辑,直接写成 if 表达式即可。

/// 返回if 
fun maxOf(a: Int, b: Int): Int{
    return  if (a > b){
        a
    }else{
        b
    }
}
//简写
fun  maxOf(a: Int,b: Int): Int{
    return if (a>b) a else b
}

实际开发里,这种写法尤其适合“二选一返回值”的场景,比如取最大值、根据状态返回文案、根据条件选择默认参数等。

when 如何替代 switch-case

Kotlin 中没有 switch-case,对应的写法是 when。它会按顺序把参数与各个分支条件进行比较,直到命中某个分支为止。

Kotlin 中 when 表达式的匹配顺序与 else 兜底示意图
when 的匹配与返回规则这张图适合解释 when 的顺序匹配、类型判断和 else 兜底规则。

Tips: Kotlin 中没有 switch-case

when 既可以作为语句使用,也可以作为表达式使用;如果作为表达式,那么命中分支的最后一个表达式值,就是整个 when 的返回值。

when 作为表达式时要注意什么

如果其他分支都不满足条件,就会进入 else 分支。通常情况下,当 when 被当作表达式使用时,需要提供 else,除非编译器已经能够确定所有可能情况都被完整覆盖。

fun eval2(number: Number):String=when(number) {
    is Int -> "this is int number"
    is Double -> "this is double number"
    is Float -> "ths is float number'
    is Long -> "this is long number"
    is Byte -> "this is byte number"
    is Short -> "this is Short number"
    else -> "invalid number"
}

这段示例的重点在于:when(number) 会依次检查 IntDoubleFloatLongByteShort 等类型分支,并返回匹配结果。

when 分支里也可以写代码块

if 一样,when 的分支不一定只能写一行表达式,也可以写成代码块。此时代码块最后一行的表达式值,仍会作为该分支的结果返回。

// when 同样是带有返回值的// when 将它的参数与所有的分支条件顺序比较,直到某个分支满足条件
fun eval2(number:Number):String=when(number) {
    is Int -> "this is int number"
    is Double -> "this is double number'"
    is Float -> {
        println("the number is float")
        "ths is float number"
    }
    is Byte -> "this is byte number"
    is Short -> "this is Short number"
    else -> "invalid number"
}

例如上面的 Float 分支,会先执行 println("the number is float"),然后把最后一行字符串 "ths is float number" 作为该分支的返回值。

Kotlin 循环控制有哪些常见写法

循环控制同样是 Kotlin 的基础能力,常见形式仍然是 forwhiledo-while。如果你有 Java 基础,这一部分上手会比较快,因为核心语义差别不大。

for 循环:直接遍历可迭代对象

Kotlin 的 for 循环可以遍历任何提供迭代器(iterator)的对象。常见写法是 for (item in elements),这一点和 Java 的 foreach 很接近。

val  array = mutableListOf<Int>(1,2,3,4,5,6,8)
for (item in array){
    println(item)
}

这种写法适合“只关心元素本身,不关心下标”的遍历场景,可读性通常也更高。

while 和 do-while 的区别

whiledo-while 在 Kotlin 中的语法和 Java 基本一致。主要区别只有一个:while 是先判断条件再执行,do-while 是先执行一次再判断条件。

val  array = mutableListOf<Int>(1,2,3,4,5,6,8)

var  index = 0
while (index < array.size){
    println("The $index element is ${array[index++]}")
}
println("空格")

 // do - while 先执行 一次循环体,再看循环条件是否满足。满足继续执行,不满足则退 
index = 0
do {
    println("The $index element is ${array[index++]}")
}while (index < array.size)

如果循环体必须至少执行一次,比如先读取一次输入、先打印一次状态,再决定是否继续,do-while 会更合适。

区间表达式怎么配合循环使用

Kotlin 的循环除了遍历集合,还经常和区间表达式配合使用。相比手动写下标范围,区间语法更直观,也更符合 Kotlin 的日常代码风格。

Kotlin 区间循环写法对比图,展示 ..、until、downTo、step 的区别
区间遍历四种常用形式把 Kotlin 区间循环的四种高频写法放在一张图里。

`..` 与 `until`:是否包含结束值

.. 表示闭区间,也就是包含结束值;until 表示不包含最后一个值。这是 Kotlin 循环里最常用、也最容易混淆的一组写法。

// ..  遍历区间,注意Kotlin的区间的包含或是闭合的。
for (i in 1 .. 10){
    println("$i")
}
// 1 2 3 4 5 6 7 8 9 10

// until 不包括最后一个元素
for (i in 1 until  10){
    println("$i")
}
// 1 2 3 4 5 6 6 7 8

使用这两种写法时,关键就是先确认你的结束值到底要不要被遍历进去。

`downTo` 与 `step`:倒序和步长控制

如果需要倒序遍历,可以使用 downTo;如果还要跳步遍历,则可以继续加上 step 指定步长。

 // downTo //是指从10 ... 1
  for ( i in 10 downTo 1){
      println("$i")
  }
// 10 9 8 7 6 5 4 3 2 1

  // step 步长
  for ( i in 10 downTo 1 step  2 ){
      println("$i")
  }
  // 10 8 6 5 4 2

这类写法常用于倒计时、反向扫描数组区间、按固定间隔处理数据等场景。

小结

这篇内容可以归纳成三个实用结论:第一,Kotlin 的 ifwhen 都可以作为表达式返回值,因此代码通常比 Java 更紧凑;第二,Kotlin 没有 switch-case,对应能力由 when 提供;第三,循环部分虽然和 Java 接近,但区间表达式如 ..untildownTostep 是 Kotlin 写法里非常高频的一组工具。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多