返回
那些Kotlin可有可无的语法糖
Android
2023-11-15 22:00:19
这几天在 review 同事的代码的时候,发现一块有意思的代码,我将其写成对应的伪代码如下:
class MyClass {
val myProperty: Int = 10
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
起初在看到这段代码的时候,觉得十分反人类,在 Kotlin 中,对象的初始化可以省略 new
操作符,也即
class MyClass {
val myProperty: Int = 10
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
和
class MyClass {
val myProperty = 10
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
效果完全一致。由于 Kotlin 可以省略 new
操作符,如果属性没有初始化,就会报错:
class MyClass {
val myProperty
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
报错信息为:
Kotlin: Unresolved reference: myProperty
所以当我们看到
class MyClass {
val myProperty: Int
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
的时候,我们知道 myProperty
属性一定被初始化了,否则就会报错。但是当我们看到
class MyClass {
val myProperty = 10
}
fun main() {
val myObject = MyClass()
println(myObject.myProperty)
}
的时候,我们就不知道 myProperty
属性是否被初始化了。
当然,我们可以通过阅读代码来判断 myProperty
属性是否被初始化了。但是,如果代码很长,或者我们对 Kotlin 不熟悉,就很容易出错。
为了避免这种错误,我们应该始终在属性声明中显式地初始化属性。这样,我们就可以一目了然地知道属性是否被初始化了。
除了属性初始化之外,Kotlin 还有一些其他的可有可无的语法糖。例如,我们可以使用 when
表达式来代替 if-else
语句。但是,when
表达式可能会使代码更难阅读。因此,我们应该谨慎使用 when
表达式。
总之,Kotlin 是一门非常强大的编程语言。但是,它也有一些可有可无的语法糖。这些语法糖可能会降低代码的可读性和质量。因此,我们应该谨慎使用这些语法糖。