返回

独享Kotlin妙处:善用新知识,体验编程之美

Android

如今,Kotlin已经在我日常的代码中占据了越来越大的比重。在使用Kotlin一段时间后,我发现总结下一些个人习惯了的使用方法是非常有必要的。这篇文章主要分享了几个比较好的用法以及一些不好的用法。如果大家觉得我在性能上、可读性上或者可维护性上存在问题,欢迎一起交流。

Kotlin代码常使用与Java一样的空安全类型、可空类型和非空类型。然而我发现Kotlin中有一种语法,可以用?做后缀,表示一个空安全类型。

class Point(val x: Int, val y: Int)

val point = Point(1, 2)
println(point.x) // 1
println(point.y) // 2

上述代码中,point变量是一个非空类型,因此我们可以在代码中直接使用它,而无需进行任何检查。如果我们要将point变量赋予一个空值,那么代码就会报错。

val point: Point? = null
println(point.x) // 报错
println(point.y) // 报错

这时候,我们需要使用?来明确告知编译器变量可能是空值。

val point: Point? = null
point?.x // null
point?.y // null

在Kotlin中,我们可以使用let函数来简化代码。let函数接收一个非空类型的参数,并在参数上执行一个函数。如果参数不为null,则函数会执行;否则,函数不会执行。

val point: Point? = Point(1, 2)
point?.let {
    println(it.x) // 1
    println(it.y) // 2
}

上述代码中,我们使用了let函数来简化代码。如果point变量不为null,那么let函数中的代码就会执行;否则,let函数中的代码不会执行。

在Kotlin中,我们可以使用apply函数来简化代码。apply函数接收一个非空类型的参数,并在参数上执行一个函数。与let函数不同的是,apply函数会返回参数本身,而不是函数执行的结果。

val point: Point = Point(1, 2)
point.apply {
    println(x) // 1
    println(y) // 2
}

上述代码中,我们使用了apply函数来简化代码。apply函数中的代码会直接在point变量上执行,而不会返回任何值。