Kotlin rang 表达式

Kotlin 的 ‌Range 表达式 ‌(区间表达式)用于表示一个有序值的范围,支持数字、字符及实现 Comparable 接口的类型。其核心语法和特性如下:

一、基本语法与类型

  1. 闭区间(Inclusive Range)

    使用 .. 运算符,包含起始和结束值:

    ini 复制代码
    kotlinCopy 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"}
  2. 开区间(Exclusive Range)

    使用 until 函数,包含起始值但不含结束值:

    ini 复制代码
    kotlinCopy Code
    val exclusiveRange = 1 until 5  // 包含 1, 2, 3, 4 ‌:ml-citation{ref="1,2" data="citationList"}

二、核心操作符与函数

  1. ‌**in!in**‌

    检查值是否在区间内:

    ruby 复制代码
    kotlinCopy 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"}
  2. 反向迭代

    使用 downTo 定义递减区间:

    ruby 复制代码
    kotlinCopy Code
    for (i in 5 downTo 1) { /* 输出 5, 4, 3, 2, 1 */ } ‌:ml-citation{ref="2,7" data="citationList"}
  3. 步长控制

    通过 step 指定步长:

    ruby 复制代码
    kotlinCopy Code
    for (i in 1..10 step 2) { /* 输出 1, 3, 5, 7, 9 */ } ‌:ml-citation{ref="2,7" data="citationList"}
  4. 区间包含性判断

    检查区间是否包含另一区间:

    ini 复制代码
    kotlinCopy Code
    val range1 = 1..10
    val range2 = 3..7
    println(range2 in range1)  // 输出 true ‌:ml-citation{ref="1" data="citationList"}

三、应用场景

  1. 迭代遍历

    直接用于 for 循环:

    ini 复制代码
    kotlinCopy Code
    for (num in 1..5) { println(num) }  // 输出 1 到 5 ‌:ml-citation{ref="1,2" data="citationList"}
  2. 条件筛选

    结合 when 表达式简化条件分支:

    sql 复制代码
    kotlinCopy Code
    val age = 12
    val group = when (age) {
        in 0..3 -> "婴幼儿"
        in 3..12 -> "少儿"
        else -> "未知"
    }  // 输出 "少儿" ‌:ml-citation{ref="4,5" data="citationList"}
  3. 集合操作

    生成数值序列或筛选范围数据:

    ini 复制代码
    kotlinCopy Code
    val list = (1..10).filter { it % 2 == 0 }  // 生成偶数列表 ‌:ml-citation{ref="2" data="citationList"}

四、特殊类型支持

  1. 浮点数范围

    Kotlin 支持 DoubleFloat 的区间定义,但不可迭代(仅用于条件判断):

    ini 复制代码
    kotlinCopy Code
    val floatRange = 0.5..5.0
    if (3.0 in floatRange) { /* 条件成立 */ } ‌:ml-citation{ref="2" data="citationList"}
  2. 自定义类型

    实现 Comparable 接口的类可定义区间:

    kotlin 复制代码
    kotlinCopy 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 表达式,可简化逻辑并减少冗余代码,尤其在数值处理、集合操作和条件分支场景中表现突出。

相关推荐
我命由我123453 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee3 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin
Android打工仔2 天前
Continuation 到底是谁创建的?
android·kotlin
Android-Flutter2 天前
android fragment 使用
android·kotlin
alexhilton2 天前
响应式的Android身份验证架构
android·kotlin·android jetpack
zzq77972 天前
Android 16 API 36 升级后 APP 加固兼容性问题解析
android·开发语言·安全·kotlin·安卓·安全架构
Sirens.3 天前
从参考 iCost 到做自己的 OneLedger:一个 Android 本地记账 App 的开发记录
android·kotlin·room·jetpack compose·记账 app
Hrain-AI3 天前
2026 企业 AI 编程智能体实战:Codex 与 Claude Code
开发语言·人工智能·kotlin
btown6 天前
Kotlin 版 MyBatis-Plus 查询优雅解决方案
kotlin
小二·6 天前
车载数字座舱实战:用魔珐星云打造下一代智能驾乘助手(附 Android/Kotlin 完整代码)
开发语言·kotlin