很多刚从 Java 转到 Kotlin 的开发者,第一批遇到的语法差异往往就出现在流程控制上:`if` 不只是语句,`when` 也不是简单照搬 `switch-case`,循环写法看似熟悉,但区间遍历又多了一套更 Kotlin 化的表达方式。本文按“条件判断怎么写、什么时候能直接返回、循环遍历有哪些常用形式”这条线梳理一遍,并保留原始示例代码,帮助你快速建立可直接上手的判断标准。
if 为什么在 Kotlin 里更像表达式
在 Kotlin 中,if 不只是条件语句,它本身还是一个表达式,所以可以返回值。这个点和 Java 不同:Java 里的 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。它会按顺序把参数与各个分支条件进行比较,直到命中某个分支为止。

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) 会依次检查 Int、Double、Float、Long、Byte、Short 等类型分支,并返回匹配结果。
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 的基础能力,常见形式仍然是 for、while 和 do-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 的区别
while 和 do-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 的日常代码风格。

`..` 与 `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 的 if 和 when 都可以作为表达式返回值,因此代码通常比 Java 更紧凑;第二,Kotlin 没有 switch-case,对应能力由 when 提供;第三,循环部分虽然和 Java 接近,但区间表达式如 ..、until、downTo、step 是 Kotlin 写法里非常高频的一组工具。







