Упрощение возврата из нескольких вложенных блоков в Kotlin - PullRequest
0 голосов
/ 06 июня 2018

Код, о котором идет речь, выглядит следующим образом:

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)
                        }
    }
}

Когда я проверяю это для стиля кода (сонар с плагином Kotlin, который использует детект), я получаю предупреждение, что я должен "Ограничить количество операторов возврата вметодов. "

Есть ли способ только вернуть return @ exec или написать код более котлинизированным способом - без такого большого количества возвратов.

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете опустить 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) }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...