1. 概述

在本文中,我们将深入探讨 Kotlin 中新增的 ..< 操作符,它在 Kotlin 1.9.0-RC 版本中正式稳定发布。这一新特性让开发者可以更直观、更简洁地创建不包含结束值的范围表达式(open-ended ranges)

2. 开放范围操作符详解

功能说明
使用 ..< 操作符可以创建一个范围对象,其包含起始值(inclusive),但不包含结束值(exclusive)。
这与我们之前常用的 .. 操作符不同,后者是闭区间(包含起始和结束两个边界值)。

⚠️ 为什么引入 ..<
Kotlin 之前已有 until 关键字能实现类似功能,但语义不够明确,开发者很难一眼看出它是包含还是不包含结束值。引入 ..< 后,语法更清晰直观,也更符合数学中常见的区间表示法。

使用示例

val numbers: IntRange = 2..<5
assertEquals(numbers.toList(), listOf(2, 3, 4))

如上所示,2..<5 生成的范围是 [2,3,4],不包括 5。

再来看字符范围的例子:

val chars = ArrayList<Char>()
for (ch in 'a'..<'e') {
    chars.add(ch)
}

assertEquals(chars, listOf('a', 'b', 'c', 'd'))

可以看到,'a'..<'e' 生成的字符序列是 'a', 'b', 'c', 'd',不包括 'e'

3. 总结

本文要点总结如下:

  • ..< 是 Kotlin 1.9.0-RC 引入的稳定操作符
  • 它用于创建开放范围(即不包含结束值的范围)
  • 相比 until 更直观,语义更清晰
  • 可用于 IntRangeCharRange 等常见类型
  • 在循环中使用也非常自然

适用场景建议:
在需要排除结束值的场景中,比如索引遍历、分页处理、时间区间等逻辑中,..< 都是一个更优雅、语义更清晰的选择。

推荐使用姿势:
如果你正在使用 Kotlin 1.9 或以上版本,建议在所有开放范围的场景中优先使用 ..<,以提升代码可读性和维护性。


原始标题:The ..< Operator for Open-ended Ranges in Kotlin