Публикация

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

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

Что такое Scope Function?

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

Например, если вы работали с Extension Function, то scope функции по своей сути реализованы по такому же подходу и представлены как функции нашего объекта.

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

Функция let используется для выполнение некой операции к нашему объекту и в результате вернут лямбда выражение или void.

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

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

Как уже упоминалось ранее scope функции это Extension Function расширяющие класс и принимающая лямбда выражение в качестве параметра.

На что важно тут обратить внимание, так это на contract {}. Он вызовет лямбда выражение, передаваемое в качестве параметра, но с некоторыми условиями:

  • Лямбда будет вызываться только во время вызова функции владельца и не будет вызываться после завершения функции;
  • Количество вызовов этой лямбда функции ровно один раз InvocationKind.EXACTLY_ONCE.

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

Лучшим и самым встречаемым способом применения let это обращение к свойству, которое может быть null.

Например, мы хотим отправить пользователю email уведомление о новых промо акциях компании, но email есть опциональным свойством, которое может быть не во всех пользователей.

data class UserAccount(var email: String? = null)

Тогда, нам необходимо выполнить следующий код:

val user: UserAccount

user.email?.let {
  sendEmail(it)
}

В том случае, когда у нашего пользователя не указан email, то let не будет выполнен и письмо не будет отправлено для этого пользователя.

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

Комментарии

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

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