Публикация

Kotlin. Функция run()

Scope функция run часто применима в том случае, когда нам нужно выполнить конкретное действие с использованием данных объекта, который в свою очередь может быть null.

Scope Function - это не что иное, как функции, которые вызывается в области видимости нашего объекта.

Если вы читаете серию "Scope функции Kotlin", то уже понимаете, что все эти функции устроены так, чтобы удобно работать с Nullable объектами.

Давайте познакомимся поближе со следующей scope функцией run().

Как устроена функция run?

Давайте посмотрим на реализацию данной функции:

/**
 * Calls the specified function [block] and returns its result.
 */
@kotlin.internal.InlineOnly
public inline fun <R> run(block: () -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block()
}

Аналогично ранее рассмотренным scope функция run() также на вход принимает лямбда выражение, которое в последствии будет применено в contract {}. Напомню, что пояснение использования contract было приведено тут.

Тип возвращаемого значения, это тип последнего выражения, которое мы вернули из переданных лямбда параметров данной функции.

Когда использовать?

Чтобы привести пример использования я определю класс UserAccount:

data class UserAccount(
  var username: String,
  val email: String
)

Чаще всего работая с объектами мы сталкиваемся с null значениями этого объекта. Используя функцию run мы избавляем себя от проверки этого значения на null и просто выполняем нужное нам действие, которое будет выполнено только в том случае если значение не равно null.

val user: UserAccount? = getUser("steve.jobs@domain.com")
user?.run {
  println(this.username)
}

В случае если user не был инициализирован, то scope функция run {} не будет выполнена.

Опубликовано: 10 ноября 2021 г.Просмотров: 82

Комментарии

Мы не даем слово анониму 😶
Войдите, пожалуйста.

Еще никто не комментировал эту публикацию 🤔