前置检查与标准工具
Kotlin 标准库提供了一组简洁而强大的函数,用于在代码执行早期验证状态、参数有效性,或标记未完成的代码。熟练使用这些工具可以让你的代码更健壮、意图更清晰。
契约式检查 (Preconditions)
这些函数用于断言代码运行的先决条件。如果不满足条件,它们会抛出特定类型的异常。
参数检查:require
require 用于验证函数的参数是否合法。如果检查失败,抛出 IllegalArgumentException。
kotlin
fun setPercentage(value: Int) {
// 基础用法
require(value in 0..100)
// 带自定义错误消息 (推荐)
require(value >= 0) { "Value must be non-negative, but was $value" }
}状态检查:check
check 用于验证对象的内部状态。如果检查失败,抛出 IllegalStateException。
kotlin
class Connection {
var isOpen = false
fun sendMessage(msg: String) {
// 确保连接已打开
check(isOpen) { "Connection is not open!" }
// ...
}
}显式错误:error
当程序运行到逻辑上不应该到达的分支时,使用 error() 直接抛出 IllegalStateException。
kotlin
val color = when (name) {
"red" -> 0xFF0000
"green" -> 0x00FF00
else -> error("Unknown color: $name") // 也可以返回 null,视业务而定
}空值检查:requireNotNull / checkNotNull
这两个函数用于确保值不为 null,并自动进行智能转换 (Smart Cast)。它们不仅检查,还会返回非空值。
kotlin
fun processUser(user: User?) {
// 如果 user 为 null,抛出 IllegalArgumentException
val nonNullUser = requireNotNull(user) { "User is required" }
// 之后可以直接使用 nonNullUser,类型为 User
println(nonNullUser.name)
}占位符 (TODO)
在开发过程中,我们经常需要先把结构写好,稍后再填充实现。TODO() 函数就是为此设计的。
kotlin
fun complexAlgorithm(): Int {
// 抛出 NotImplementedError,并在控制台显示 "An operation is not implemented."
TODO()
}
fun withReason(): String {
// 带原因的 TODO,IDE 也会高亮提示
TODO("Wait for backend API v2")
}IDE 支持
IntelliJ IDEA / Android Studio 会特别对待 TODO()。它们会在 "TODO" 工具窗口中列出所有位置,并且将该路径标记为不可达代码(Unreachable code),从而避免编译器报“缺少返回值”的错误。
重复执行 (repeat)
简单的循环可以使用 repeat 函数替代 for 循环,语法更轻量。
kotlin
// 打印 5 次
repeat(5) { index ->
println("Hello $index")
}资源自动关闭 (use)
对于实现了 Closeable 接口的对象(如 IO 流),use 函数保证了块执行完毕后(无论成功还是抛出异常)都会自动关闭资源。这等同于 Java 的 try-with-resources。
kotlin
File("data.txt").inputStream().use { stream ->
val data = stream.readBytes()
// stream 在此处会自动关闭
}