Kotlin 的 Range 表达式 (区间表达式)用于表示一个有序值的范围,支持数字、字符及实现 Comparable
接口的类型。其核心语法和特性如下:
一、基本语法与类型
-
闭区间(Inclusive Range)
使用
..
运算符,包含起始和结束值:inikotlinCopy Code val intRange = 1..5 // 包含 1, 2, 3, 4, 5 :ml-citation{ref="1,2" data="citationList"} val charRange = 'a'..'e' // 包含 'a' 到 'e' :ml-citation{ref="3" data="citationList"}
-
开区间(Exclusive Range)
使用
until
函数,包含起始值但不含结束值:inikotlinCopy Code val exclusiveRange = 1 until 5 // 包含 1, 2, 3, 4 :ml-citation{ref="1,2" data="citationList"}
二、核心操作符与函数
-
**
in
与!in
**检查值是否在区间内:
rubykotlinCopy Code if (x in 1..10) { /* x 在 1~10 之间 */ } :ml-citation{ref="3,7" data="citationList"} if (y !in 'a'..'z') { /* y 不在字母 a~z 间 */ } :ml-citation{ref="3" data="citationList"}
-
反向迭代
使用
downTo
定义递减区间:rubykotlinCopy Code for (i in 5 downTo 1) { /* 输出 5, 4, 3, 2, 1 */ } :ml-citation{ref="2,7" data="citationList"}
-
步长控制
通过
step
指定步长:rubykotlinCopy Code for (i in 1..10 step 2) { /* 输出 1, 3, 5, 7, 9 */ } :ml-citation{ref="2,7" data="citationList"}
-
区间包含性判断
检查区间是否包含另一区间:
inikotlinCopy Code val range1 = 1..10 val range2 = 3..7 println(range2 in range1) // 输出 true :ml-citation{ref="1" data="citationList"}
三、应用场景
-
迭代遍历
直接用于
for
循环:inikotlinCopy Code for (num in 1..5) { println(num) } // 输出 1 到 5 :ml-citation{ref="1,2" data="citationList"}
-
条件筛选
结合
when
表达式简化条件分支:sqlkotlinCopy Code val age = 12 val group = when (age) { in 0..3 -> "婴幼儿" in 3..12 -> "少儿" else -> "未知" } // 输出 "少儿" :ml-citation{ref="4,5" data="citationList"}
-
集合操作
生成数值序列或筛选范围数据:
inikotlinCopy Code val list = (1..10).filter { it % 2 == 0 } // 生成偶数列表 :ml-citation{ref="2" data="citationList"}
四、特殊类型支持
-
浮点数范围
Kotlin 支持
Double
和Float
的区间定义,但不可迭代(仅用于条件判断):inikotlinCopy Code val floatRange = 0.5..5.0 if (3.0 in floatRange) { /* 条件成立 */ } :ml-citation{ref="2" data="citationList"}
-
自定义类型
实现
Comparable
接口的类可定义区间:kotlinkotlinCopy Code data class Date(val year: Int) : Comparable<Date> { /* ... */ } val dateRange = Date(2023)..Date(2025) :ml-citation{ref="2" data="citationList"}
五、性能优化
- 编译优化 :Kotlin 编译器将
for (i in a..b)
转换为基于索引的高效迭代逻辑2。 - 避免大范围操作 :对于极大范围(如
1..1_000_000
),优先使用序列(asSequence
)减少内存占用2。
总结
Kotlin 的 Range 表达式通过简洁的语法和丰富的操作符,显著提升了代码可读性与开发效率。其核心优势包括:
- 简洁性:替代传统的循环和条件判断代码17。
- 灵活性:支持步长、反向迭代及多类型适配25。
- 类型安全:编译时检查区间合法性,避免运行时错误23。
合理利用 Range 表达式,可简化逻辑并减少冗余代码,尤其在数值处理、集合操作和条件分支场景中表现突出。