два способа создания функций по сравнению в kotlin - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть этот фрагмент функции

fun getNewIntent(context: Context, following: Boolean, userId: String): Intent {
    val intent = Intent(context, UsersActivity::class.java)
    intent.putExtra(FOLLOW, following)
    intent.putExtra(USER, userId)
    return intent
}

, который также можно записать так:

fun getNewIntent(context: Context, following: Boolean, userId: String): Intent =
        Intent(context, UsersActivity::class.java).also {
            it.putExtra(FOLLOW, following)
            it.putExtra(USER, userId)
        }

и пример, в котором это был только 1 параметр

fun getNewIntent(context: Context, userId: String): Intent =
        Intent(context, UsersActivity::class.java).apply { putExtra(USER, userId) }

какой из них лучше?а почему?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Они в основном эквивалентны.Я бы выбрал то, что наиболее читаемо для вас и / или вашей команды.

Мне лично нравятся прямые указания, если достаточно ясно, что делается в функции.Обычно это имеет место, если это однострочный или если за инициализацией следует что-то вроде .apply (так что в основном это просто относительно короткий).Для ваших функций я бы на самом деле ввел что-то вроде следующего:

inline fun <reified T> newIntent(context: Context, applyToIntent : Intent.() -> Unit = {}) = Intent(context, T::class.java).apply(applyToIntent)

, которое затем можно использовать для нескольких действий.Использование может быть таким простым:

newIntent<UsersActivity>(context) {
  putExtra(FOLLOW, following)
  putExtra(USER, userId)
}

Или, если вам действительно нужна текущая функция (хотя я не вижу реальной причины для этого), она остается достаточно простой:

fun getNewIntent(context: Context, following: Boolean, userId: String) = newIntent<UsersActivity>(context) {
    putExtra(FOLLOW, following)
    putExtra(USER, userId)
}
0 голосов
/ 23 ноября 2018

Без разницы.Второй вариант должен быть использован, если вы можете написать return в одной строке, вместо этого лучше использовать сначала.Также во втором варианте вы можете удалить эту часть : Intent.

Также можете проверить это - https://kotlinlang.org/docs/reference/functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...