Функции 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 — локальная установка не требуется.
Все уроки этого курса
- Допускающие null и ненулевые типы
- Безопасные вызовы и Elvis
- Функции let, also и области видимости
- Как избежать NullPointerExceptions