当前位置: 首页 > news >正文

Kotlin 边界限制

文章目录

  • Kotlin 边界限制
    • 传统方式
    • coerceIn
    • coerceAtLeast
    • coerceAtMost
    • 自定义类型

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():限制值的范围,超出范围则返回边界值。

fun processScore2(score: Int): Int {return score.coerceIn(0, 100)
}println(processScore2(-10)) // 0
println(processScore2(80)) // 80
println(processScore2(120)) // 100

coerceAtLeast

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

fun processScore3(score: Int): Int {return score.coerceAtLeast(0)
}println(processScore3(-10)) // 0
println(processScore3(80)) // 80
println(processScore3(120)) // 120

coerceAtMost

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

fun processScore4(score: Int): Int {return score.coerceAtMost(100)
}println(processScore4(-10)) // -10
println(processScore4(80)) // 80
println(processScore4(120)) // 100

自定义类型

// 自定义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)

相关文章:

  • vant Dialog组件调用的坑
  • 【Hive入门】Hive数据模型与存储格式深度解析:从理论到实践的最佳选择
  • 前端基础之《Vue(8)—内置组件》
  • Python文本的基本操作:with语句
  • Tomcat 8 启动闪退解决方案:版本差异与调试技巧详解
  • uv pip install 的本质是什么?
  • 08-IDEA企业开发工具-集成AI插件通义灵码
  • mybatis xml中特殊字符处理
  • Java基础:网络编程UDPTCP详解
  • Vite vs Webpack 优势对比
  • 车载信息安全架构 --- 汽车网络安全
  • 基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真
  • 穿越链路的旅程:深入理解计算机网络中的数据链路层
  • WebSocket是h5定义的,双向通信,节省资源,更好的及时通信
  • 栈和队列学习记录
  • 【playwright】学习--持续汇总
  • onlyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
  • 视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
  • 高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案
  • 使用Python创建带边框样式的Word表格
  • 看正背面月壤、听火星上的声音,记者探营“中国航天日”科普展
  • 美国那点事|特朗普的“刀”砍向国务院,美国霸权迎来历史拐点?
  • 神二十发射时间藏着两彩蛋:恰逢东方红一号发射55周年和第十个“中国航天日”
  • 从神舟五号到神舟二十号,每次任务标识藏着哪些逐梦星辰的密码
  • 今天是世界读书日,上海准备了哪些文化大餐?
  • 七大外贸省市,靠什么撑起一季度的出口?