Open cyrushine opened 1 year ago
// 为何1和2两处需要添加问号?,而3处则不需要,为什么呢? fun printLength(str: String? = null) { println(str?.length) // 1 if (!TextUtils.isEmpty(str)) { // 2 println(str?.length) } if (!str.isNullOrEmpty()) { // 3 println(str.length) } } @kotlin.internal.InlineOnly public inline fun CharSequence?.isNullOrEmpty(): Boolean { contract { returns(false) implies (this@isNullOrEmpty != null) } return this == null || this.length == 0 }
contract(契约)是一种 Kotlin 面向编译器约定的一种规则,它帮助编译器更加智能地识别某些需要特定的代码条件,为代码创建更加友好的上下文关联环境。 Kotlin 在 1.3 版本以实验室功能的方式开始引入 contract, 截止至当前 Kotlin 最新版本 1.6.10,contract 方法依然添加有 @ExperimentalContracts 注解。
常见标准库函数run,also,with,apply,let,每个里面都用到contract契约:
@kotlin.internal.InlineOnly public inline fun <T> T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this }
Kotlin 标准库随处可见的 contract 到底是什么? - 掘金 聊一聊Kotlin之contract - 掘金
contract(契约)是一种 Kotlin 面向编译器约定的一种规则,它帮助编译器更加智能地识别某些需要特定的代码条件,为代码创建更加友好的上下文关联环境。 Kotlin 在 1.3 版本以实验室功能的方式开始引入 contract, 截止至当前 Kotlin 最新版本 1.6.10,contract 方法依然添加有 @ExperimentalContracts 注解。
常见标准库函数run,also,with,apply,let,每个里面都用到contract契约:
Kotlin 标准库随处可见的 contract 到底是什么? - 掘金 聊一聊Kotlin之contract - 掘金