赞
踩
Kotlin处理空引用的风格/策略是在编译期检查出空引用的地方,如果检测查出来便编译失败并提示,即在编译阶段就避免了空引用的调用。为达完成这个目标,Kotilin提供一系列的语法规范去约束大家,同时帮助编译器更好的去判断是否使用用了空引用的同时,也使代码更简洁(减少出现对判空的代码)。其中最核心的是变量定义的时候需要声名变量是否可空,还是非可空(在变量类型后加?号),非可空就是不可以赋值为null,非可空对于对于在编码过程中可以不用判断是否为空。这样下,一方面代码简洁了,另一方面编译器判空的实现也简单与容易了。变量可空时,Kotlin除了提供一系统的语法糖方便我们安全与优雅编写判空的代码,同时编译器也会结合代码的上下文,帮忙我们尽可以的减少非空的判断操作。如下示例代码就是编译器根据上下文判断引用的安全性
val b: String? = "Kotlin"
if (b != null && b.length > 0) {
print("String of length ${b.length}") // 编译器已经根据判断条件,确定b变量安全(非空)
} else {
print("Empty string")
}
语句与表达式的最主要的区别是表达式是有值的,有值意味关可以赋值给变量!在学习Kotiln提供的语法糖时需要时刻关注该语法是个语句还是个表达式,这个非常重要,除了能深刻理解该语法,还能更理解加容易记忆与使用
注意,在 Kotlin 和 Java 中表述什么是表达式以及什么不是表达式时,两者有基本的差别。所有的 Kotlin 函数调用都是表达式,因为他们至少会返回 Unit。调用没有定义任意返回值的 Java 函数时不是表达式。
Kotlin 中变量赋值(a = 1)不是表达式,但是在 Java 中则是,因为这个操作之后会返回被赋予的值(在 Java 中,你可以 a = b = 2 或者 a = 2 * (b = 3)))。
在 Java 中所有的控制结构(if, switch) 都不是表达式,而在 Kotlin 中允许 if, when , try 返回值
变量名 : 变量类型 //非可空
变量名 : 变量类型? //可空
安全调用主要是指对于可空变量的使用,除了传统的判空再使用,kotlin提供了额外的语法糖(?.)操作,需要注意该操作是一个表达式,如果操作的变量为空,表达值示值结果是null,否则是实例的调用返回值
val a = "Kotlin"
val b: String? = null
println(b?.length) //这里控制台为输出 null
// 如果 `person` 或者 `person.department` 其中之一为空,都不会调用该函数:
person?.department?.head = managersPool.getManager()
// 注?这个有点矛盾呀,这时候不会求值,但又还是表达式!!!
Elvis 操作符可以替换 当?.操作变量为空时表达式的默认值(null)
val l: Int = if (b != null) b.length else -1
// elvis的写法
val l = b?.length ?: -1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。