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

相关推荐
pengyu2 小时前
【Kotlin 协程修仙录 · 元婴境 · 中阶】 | 操作符真解:Flow 中间操作符与数据流变幻术
android·kotlin
pengyu3 小时前
【Kotlin 协程修仙录 · 元婴境 · 初阶】 | 冷流初啼:Flow 的基础与响应式编程的入门
android·kotlin
Kapaseker21 小时前
破坏性更新 - 解读 Jetpack Compose 1.12
android·kotlin
Android-Flutter1 天前
android LeakCanary 工作原理 详解
android·kotlin
Android-Flutter1 天前
android 自定义view 详解
android·kotlin
Android打工仔1 天前
从 finally 理解程序的控制流:它为什么不是 catch 后面的代码?
android·kotlin
YXL1111YXL1 天前
续体和状态机 —— suspend 函数的 CPS 变换
android·kotlin
alexhilton1 天前
千万别误用Android Skills
android·kotlin·android jetpack
必须会一定会1 天前
GLM-5.3 迁移实战:强制思考、1M 上下文与官方编程基准
android·开发语言·kotlin
阿pin2 天前
Android随笔-kotlin withContext
android·kotlin·withcontext