0Pricing
Android Academy · Урок

Функции let, also и области видимости

Работайте со значениями, допускающими null.

«Функции let, also и области видимости» — бесплатный урок Android Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.

Что такое функции области видимости

Функции области видимости позволяют выполнять блок кода в контексте объекта. Они делают код более лаконичным, особенно при работе со значениями, допускающими null.

В этом уроке рассматриваются let и also — две наиболее полезные функции для обеспечения безопасности при работе с null, а также их связь с оператором безопасного вызова.

Функция let

let выполняет блок и передаёт в него объект под именем it. Она возвращает результат выполнения блока.

Эта функция удобна для преобразования значения или задания области видимости временного имени.

fun main() {
    val length = "Kotlin".let { it.length }
    println(length)  // prints: 6
}

let для безопасности при работе с null

Объедините ?. с let, чтобы выполнять блок только тогда, когда значение не равно null. Блок выполняется один раз, получая значение под именем it.

Если значение равно null, блок полностью пропускается.

fun main() {
    val name: String? = "Ada"
    name?.let {
        println("Hello, " + it)
    }
}

Пропускается при значении null

Если объект-получатель равен null, конструкция ?.let ничего не делает. Блок не выполняется.

Эта программа ничего не выводит, потому что name равно null.

fun main() {
    val name: String? = null
    name?.let {
        println("Hello, " + it)
    }
}

Переименование it

Вместо it можно дать параметру более понятное имя. Это улучшает читаемость длинных блоков.

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

val name: String? = "Bo"
name?.let { value ->
    println(value.uppercase())
}

Функция also

also тоже передаёт объект под именем it, но возвращает исходный объект, а не результат выполнения блока.

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

fun main() {
    val n = 5.also { println("got " + it) }
    println(n)  // prints: 5
}

Возвращаемое значение let и also

Ключевое различие таково: let возвращает результат блока, а also — исходный объект.

Выбирайте let для преобразования, а also — чтобы просмотреть значение, не изменяя его.

val a = "hi".let { it.length }   // a = 2 (Int)
val b = "hi".also { it.length }  // b = "hi" (String)

also для ведения журнала

Поскольку also возвращает объект, её можно встроить в цепочку, чтобы проверить значение в процессе.

Здесь мы записываем в журнал допускающее null значение, только если оно присутствует, а затем продолжаем его использовать.

fun main() {
    val token: String? = "abc"
    val result = token?.also { println("token: " + it) }
    println(result)
}

let с оператором Элвиса

Объедините ?.let с оператором Элвиса, чтобы задать альтернативный вариант, если значение равно null.

При наличии значения блок создаёт результат, а правая часть оператора Элвиса обрабатывает случай null.

fun main() {
    val raw: String? = null
    val out = raw?.let { it.trim() } ?: "empty"
    println(out)  // prints: empty
}

Выбор функции области видимости

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

Обе функции естественно сочетаются с оператором безопасного вызова и помогают избежать сбоев из-за null.

user?.let { save(it) }      // transform/use
user?.also { log(it) }      // side effect, keep user

Объединённый пример

Эта программа использует ?.let, чтобы создать сообщение, а оператор Элвиса — чтобы задать запасной вариант. Она показывает повседневный стиль работы с безопасным для null кодом на Kotlin.

Явных проверок на null нет, но код полностью безопасен.

fun main() {
    val city: String? = "Goreme"
    val label = city?.let { "City: " + it } ?: "Unknown"
    println(label)
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли работу let и also.

Краткое повторение

Функции области видимости выполняют блок в контексте объекта. let передаёт объект под именем it и возвращает результат блока, а also передаёт it и возвращает исходный объект.

С помощью ?.let можно работать со значением только тогда, когда оно не равно null. Далее Вы объедините эти идеи, чтобы полностью избежать NullPointerExceptions.

Часто задаваемые вопросы

Урок «Функции let, also и области видимости» бесплатный?

Да — полный текст урока «Функции let, also и области видимости» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.

Чему я научусь в уроке «Функции let, also и области видимости»?

Работайте со значениями, допускающими null. Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Функции let, also и области видимости»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Допускающие null и ненулевые типы
  2. Безопасные вызовы и Elvis
  3. Функции let, also и области видимости
  4. Как избежать NullPointerExceptions
← Назад к Android Academy