Kotlin中依赖反向范围不执行for循环是否可行?
关于Kotlin范围与for循环执行的两个问题解答
疑问1:Kotlin中是否可依赖反向范围(如10..0)不执行for循环?
完全可以放心依赖这个特性!Kotlin里用..运算符创建的是递增范围(IntRange),当起始值大于结束值时,这个范围会是空的(没有任何元素)。所以当你写for (i in 10..0)时,循环体根本不会执行——因为这个范围里没有可迭代的元素。
这不是某个版本的临时行为,而是Kotlin语言规范明确规定的特性,只要你用的是标准的..创建范围,这个逻辑就一直稳定可靠。
疑问2:结合示例代码,是否因存在downTo操作符,就可安全依赖该特性?
先看你的示例代码:
val arr = arrayOf(1,2,3) val level = 0 for (i in arr.indices) { for (j in i + 1..level) { //never runs } }
这里内层循环的i + 1..level,当i从0开始时,i+1是1,level是0,所以1..0是空范围,循环自然不会执行。
要明确的是:..和downTo是两个完全独立的范围创建方式:
a..b:仅当a <= b时才会生成包含元素的递增范围,否则为空a downTo b:仅当a >= b时生成包含元素的递减范围,否则为空
两者的行为是明确区分开的,不存在互相影响的情况。所以你完全可以安全依赖..创建的反向范围(起始>结束)不执行循环的特性——哪怕有downTo这个运算符存在,也不会改变..的既定行为。这个逻辑是语言设计时就确定好的,不会随便变动。
内容的提问来源于stack exchange,提问作者smdufb
相关产品推荐
相关产品推荐

