Шаг 100.
Основы Kotlin.
Стандартные функции. Функция let

    На этом шаге мы рассмотрим назначение и применение этой функции.

    Еще одна часто используемая стандартная функция - это let, которая определяет переменную в область видимости заданной лямбды и позволяет использовать ключевое слово it для ссылки на нее. Вот пример let, который возводит в квадрат первое число в списке:

  val firstItemSquared = listOf(1,2,3).first().let { 
    it * it
  }

    Без let пришлось бы присвоить первый элемент переменной, чтобы выполнить умножение:

  val firstElement = listOf(1,2,3).first()
  val firstItemSquared = firstElement * firstElement

    В сочетании с другими возможностями Kotlin функция let дает дополнительные выгоды. Как мы уже отмечали, для работы с типами, поддерживающими null, можно использовать оператор ?: и let. Взгляните на следующий пример, который изменяет текст приветствия в зависимости от того, узнал трактирщик игрока или нет:

fun formatGreeting(vipGuest: String?): String { return vipGuest?.let {
    "Welcome, $it. Please, go straight back - your table is ready."
} ?: "Welcome to the tavern. You'll be seated soon."
}

    Так как переменная vipGuest имеет тип с поддержкой null, важно убедиться, что она не равна null, прежде чем вызывать остальные функции. Оператор безопасного вызова гарантирует, что let выполнится, только если строка не равна null; а если let выполняется, значит, аргумент it тоже не равен null.

    Сравните formatGreeting() с версией, не использующей let:

fun formatGreeting(vipGuest: String?): String { return 
    if (vipGuest != null) {
        "Welcome, $vipGuest. Please, go straight back - your table is ready."
    } else {
        "Welcome to the tavern. You'll be seated shortly."
    }
}

    Эта версия formatGreeting() функционально эквивалентна, но более многословна. Структура if/else использует полное имя переменной vipGuest дважды: первый раз в условии и второй раз - для создания итоговой строки. let, с другой стороны, допускает текучий стиль, или стиль цепочкой, который позволяет использовать имя переменной только один раз.

    Функцию let можно вызвать для любого объекта-приемника и получить результат выполнения лямбды. В нашем примере let вызывается относительно переменной vipGuest с типом, поддерживающим null. Переданная в let лямбда получает объект-приемник как единственный аргумент. Поэтому ссылаться на аргумент можно с помощью ключевого слова it.

    Несколько различий между let и apply, о которых стоит упомянуть: как вы уже видели, let передает объект-приемник в лямбду, но apply ничего не передает. Также apply возвращает текущий объект-приемник, как только анонимная функция завершает работу. Функция let, напротив, возвращает результат выполнения последней строки лямбды.

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

    На следующем шаге мы рассмотрим функцию run.




Предыдущий шаг Содержание Следующий шаг