简化Kotlin中多个嵌套块的返回

时间:2018-06-06 12:04:45

标签: kotlin

有问题的代码如下:

fun get(context: Context, s: String): MyObjectDb? {
    return context.database.use {
        return@use select(MyObjectDb.TABLE_NAME, *MyObjectDb.PROJECTION)
                    .whereArgs("${MyObjectDb.COLUMN_S} = {s}", "s" to s)
                        .exec {
                            return@exec getOne(MyObjectDb::fromCursor)
                        }
    }
}

当我检查这个代码样式时(使用schkt的Kotlin插件的声纳)我得到一个警告,我应该"限制方法中返回语句的数量。"

有没有办法只返回@ exec或以更多的Kotlinized方式编写代码 - 没有那么多的返回。

1 个答案:

答案 0 :(得分:3)

当lambda只包含一个表达式时,可以省略return。由于您的函数也只包含一个表达式,因此您可以在=之后编写函数体以省略返回值。因此,您可以将代码缩短为:

fun get(context: Context, s: String): MyObjectDb? = context.database.use {
    select(MyObjectDb.TABLE_NAME, *MyObjectDb.PROJECTION)
        .whereArgs("${MyObjectDb.COLUMN_S} = {s}", "s" to s)
        .exec { getOne(MyObjectDb::fromCursor) }
}