简化Kotlin中多个嵌套块的返回
有关守则如下:简化Kotlin中多个嵌套块的返回,kotlin,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)
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)
}
}
}
当我检查代码样式(sonar with Kotlin插件使用detekt)时,我得到一个警告,我应该“限制方法中返回语句的数量”
有没有办法只回来return@exec或者以更加Kotlinization的方式编写代码-没有那么多返回。当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) }
}
当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) }
}