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)
相关推荐
人生游戏牛马NPC1号2 小时前
学习Android(四)
android·kotlin
百锦再3 小时前
Kotlin学习基础知识大全(上)
android·xml·学习·微信·kotlin·studio·mobile
louisgeek3 小时前
Kotlin 协程 launch 和 async 的区别
kotlin
张可6 小时前
历时两年半开发,Fread 项目现在决定开源,基于 Kotlin Multiplatform 和 Compose Multiplatform 实现
android·前端·kotlin
百锦再13 小时前
Java与Kotlin在Android开发中的全面对比分析
android·java·google·kotlin·app·效率·趋势
喵手1 天前
从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
java·python·kotlin
居然是阿宋1 天前
Kotlin高阶函数 vs Lambda表达式:关键区别与协作关系
android·开发语言·kotlin
wangz761 天前
kotlin的kmp编程中遇到Unresolved reference ‘java‘问题
kotlin·kmp
投笔丶从戎1 天前
Kotlin Multiplatform--01:项目结构基础
android·开发语言·kotlin