Kotlin 边界限制

文章目录

Kotlin 边界限制

传统方式

kotlin 复制代码
fun processScore(score: Int): Int {
    if (score < 0) {
        return 0
    } else if (score > 100) {
        return 100
    }
    return score
}

println(processScore(-10)) // 0
println(processScore(80)) // 80
println(processScore(120)) // 100

coerceIn

coerceIn():限制值的范围,超出范围则返回边界值。

kotlin 复制代码
fun processScore2(score: Int): Int {
    return score.coerceIn(0, 100)
}

println(processScore2(-10)) // 0
println(processScore2(80)) // 80
println(processScore2(120)) // 100

coerceAtLeast

coerceAtLeast():限制下限,低于下限值则返回下限值。

kotlin 复制代码
fun processScore3(score: Int): Int {
    return score.coerceAtLeast(0)
}

println(processScore3(-10)) // 0
println(processScore3(80)) // 80
println(processScore3(120)) // 120

coerceAtMost

coerceAtMost():限制上限,高于上限值则返回上限值。

kotlin 复制代码
fun processScore4(score: Int): Int {
    return score.coerceAtMost(100)
}

println(processScore4(-10)) // -10
println(processScore4(80)) // 80
println(processScore4(120)) // 100

自定义类型

kotlin 复制代码
// 自定义Comparable类
data class MyDate(val year: Int, val month: Int, val day: Int) : Comparable<MyDate> {
    override fun compareTo(other: MyDate): Int {
        return compareValuesBy(this, other,
                               { it.year }, { it.month }, { it.day })
    }
}

// 定义扩展函数
fun <T : Comparable<T>> T.coerceIn(min: T, max: T): T {
    if (this < min) {
        return min
    } else if (this > max) {
        return max
    }
    return this
}

fun processDate(date: MyDate): MyDate {
    val minDate = MyDate(2024, 1, 1)
    val maxDate = MyDate(2024, 12, 31)
    return date.coerceIn(minDate, maxDate)
}

val date = MyDate(2023, 2, 30)
println(processDate(date)) // MyDate(year=2024, month=1, day=1)
val date2 = MyDate(2024, 1, 1)
println(processDate(date2)) // MyDate(year=2024, month=1, day=1)
val date3 = MyDate(2025, 1, 1)
println(processDate(date3)) // MyDate(year=2024, month=12, day=31)
相关推荐
gjxDaniel21 小时前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
野生技术架构师1 天前
Java 21虚拟线程 vs Kotlin协程:高并发编程模型的终极对决与选型思考
java·开发语言·kotlin
言之。1 天前
Kotlin快速入门
android·开发语言·kotlin
常利兵1 天前
Android Gradle 构建脚本现代化:Kotlin DSL (.kts) 与 Groovy DSL 深度对比与实战指南
android·开发语言·kotlin
baidu_247438611 天前
Android kotlin 定时n秒完成时回调,含暂停和继续
android·kotlin
stevenzqzq1 天前
kotlin和compose中使用by
kotlin·compose
符哥20081 天前
Android 开发中如何使用Coroutines
android·kotlin
sinat_267611912 天前
跟着官网学习协程随笔
学习·kotlin
缺一句感谢和缺一句道歉2 天前
Module was compiled with an incompatible version of Kotlin.
java·kotlin
灯火不休ᝰ2 天前
[安卓] Kotlin中的架构演进:从MVC到MVVM
android·架构·kotlin