You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中这种空值校验的写法是否为良好编码风格,有更优方案吗?

关于Kotlin参数空校验写法的相关说明

现有写法的风格评估

你写的这种text ?: return的写法属于Kotlin社区广泛认可的良好编码风格:

  • 属于典型的*快速失败(fail-fast)*实践,提前拦截非法空输入,避免后续逻辑出现空指针异常
  • 代码简洁无嵌套,可读性高,执行完该行后Kotlin编译器会自动将text智能推导为非空String类型,后续使用不需要额外判空
  • 适用于入参为空时可以直接静默退出当前函数、不需要额外报错的场景

更优的场景化实现方案

针对不同的业务场景,还有更贴合语义的实现可选:

1. 入参为空属于异常调用场景,需要抛出明确错误

可以用Kotlin标准库提供的requireNotNull/checkNotNull函数,语义更明确,还支持自定义错误信息方便排查:

fun test(text: String?) {
    // require系列用于入参校验,空值时抛出IllegalArgumentException
    requireNotNull(text) { "入参text不能为null" }
    // 后续text自动识别为非空类型
}

如果是校验内部状态而非入参,可以用checkNotNull,空值时抛出IllegalStateException,语义区分更清晰。

2. 入参为空时需要返回默认值

如果函数有返回值,空输入场景需要返回默认值的话,可以直接结合Elvis表达式写在返回逻辑里:

fun getTextLength(text: String?): Int {
    return text?.length ?: 0
}

3. 仅对非空值执行指定逻辑

如果只有非空时需要执行一段逻辑,也可以用?.let写法,适合逻辑较短的场景:

fun test(text: String?) {
    text?.let { nonNullText ->
        // 基于非空的nonNullText执行逻辑
    }
}

注意如果有多个参数需要判空,嵌套let的可读性会大幅下降,这种情况更推荐用逐个?: return的写法。


内容的提问来源于stack exchange,提问作者Yuki N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:45:03