这是非常糟糕的练习使用!! 在kotlin?

lan*_*nyf 1 kotlin kotlin-null-safety

最近有一些讨论是否!! 应该用在kotlin代码中.一种观点认为它根本不应该被使用,因为这对kotlin来说是一种不好的做法,并增加了崩溃的风险.

另一种意见感觉使用!! 只要你知道在任何已知条件下可以为空的数据都不应该是空的,这绝对不是一件坏事!在那里只是一个安全卫士(如果它出乎意料地变为零,它应该不会被捕获并引起关注,那么它肯定需要被调查).它不应该考虑使用!! 是一个崩溃的原因.

有没有人有意见或vor使用!! (不是盲目地使用它)?

下面两个示例,没有看到dataCount_2会更好,还是?

var data: List<Data>? = null  // it will be set before calling the two dataCount()

fun dataCount_1() : Int {
    return if (data!=null && data!!.isNotEmpty())  data!![0].count else 0
}

fun dataCount_2() : Int {

    data?.let { dataList ->
        if (dataList.isNotEmpty()) {
            return dataList[0].count ?: 0
        }
    }
    return 0
}
Run Code Online (Sandbox Code Playgroud)

yol*_*ole 6

在这种情况下,有多种惯用的方式来表达这个想法而不使用!!,所以最好不要使用它.这是我要做的(使用Kotlin 1.3中添加的orEmpty函数):

fun dataCount() = data.orEmpty().firstOrNull()?.count ?: 0
Run Code Online (Sandbox Code Playgroud)

在其他情况下,它可能不那么容易,所以没有绝对的规则说!! 绝对不能使用.但是,根据我们的经验,相当大比例的使用!! 在IntelliJ和Kotlin代码库中最终被报告为来自用户的运行时异常.