Kotlin Academy · Урок

Безопасные вызовы и Elvis

Операторы ?. и ?:

Урок 2 из 413 шагов

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

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

Постоянная запись if (x != null) становится многословной. Kotlin предлагает два кратких оператора для значений, допускающих null:

  • безопасный вызов ?.
  • оператор Элвиса ?:

Оператор безопасного вызова

Безопасный вызов ?. вызывает метод или читает свойство только в том случае, если значение не равно null. В противном случае всё выражение вычисляется как null.

Никаких сбоев и явных проверок.

fun main() {
    val name: String? = "Kotlin"
    println(name?.length)
}

Безопасный вызов для null

Если объект-получатель равен null, безопасный вызов прекращает дальнейшее выполнение и возвращает null, не вызывая исключение.

Это главное отличие от обычного вызова через точку.

fun main() {
    val name: String? = null
    println(name?.length)
}

Цепочки безопасных вызовов

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

Это позволяет избежать глубоко вложенных проверок на null.

fun main() {
    val text: String? = "hello world"
    val result = text?.uppercase()?.substring(0, 5)
    println(result)
}

Оператор Элвиса

Оператор Элвиса ?: предоставляет резервное значение, если левая часть равна null.

Читайте его так: используйте левое значение, а если его нет — правое.

fun main() {
    val name: String? = null
    val display = name ?: "Guest"
    println(display)
}

Оператор Элвиса при наличии значения

Если левая часть не равна null, оператор Элвиса просто возвращает её и игнорирует резервное значение.

Резервное значение используется только тогда, когда значение отсутствует.

fun main() {
    val name: String? = "Sam"
    val display = name ?: "Guest"
    println(display)
}

Сочетание безопасного вызова и оператора Элвиса

Эти операторы часто используют вместе. Безопасный вызов может вернуть null, а оператор Элвиса подставляет резервное значение.

Это один из самых распространённых идиоматических приёмов Kotlin.

fun main() {
    val name: String? = null
    val length = name?.length ?: 0
    println(length)
}

Оператор Элвиса для досрочного возврата

Правой частью оператора Элвиса может быть return или throw. Это удобный способ немедленно завершить выполнение, если значение отсутствует.

Если id равно null, функция немедленно завершает работу.

fun process(id: String?) {
    val safeId = id ?: return
    println("Processing " + safeId)
}

fun main() {
    process("A-100")
    process(null)
    println("done")
}

Безопасный вызов с let

Сочетайте ?. с let, чтобы выполнять блок только в том случае, если значение не равно null.

Внутри блока it обозначает значение, не равное null.

fun main() {
    val name: String? = "Kotlin"
    name?.let {
        println("Length is " + it.length)
    }
}

Значения по умолчанию для чисел с оператором Элвиса

Оператор Элвиса удобен для преобразования чисел, допускающих null, в безопасные значения по умолчанию перед выполнением арифметических операций.

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

fun main() {
    val count: Int? = null
    val total = (count ?: 0) + 5
    println(total)
}

Объединяем всё

Вместе эти операторы заменяют громоздкие проверки на null:

  • ?. вызывает метод только при значении, не равном null
  • ?: подставляет резервное значение при null
  • Цепочки и let делают сложные последовательности действий краткими
fun main() {
    val input: String? = null
    val name = input?.trim()?.uppercase() ?: "UNKNOWN"
    println(name)
}

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

Проверьте, насколько хорошо Вы понимаете безопасные вызовы и оператор Элвиса.

Итоги

Вы изучили два основных оператора для работы со значениями, допускающими отсутствие значения:

  • Безопасный вызов ?. возвращает нулевое значение вместо аварийного завершения
  • Оператор Элвиса ?: предоставляет резервное значение
  • Они хорошо сочетаются с let и досрочными возвратами

Далее Вы познакомитесь с оператором !! и узнаете, почему его следует использовать осторожно.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

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

Курсы
51
Уроки
203

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

Урок «Безопасные вызовы и Elvis» бесплатный?

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

Чему я научусь в уроке «Безопасные вызовы и Elvis»?

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

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

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

Сколько времени занимает урок «Безопасные вызовы и Elvis»?

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

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

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

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

  1. Типы Nullable и Non-Null
  2. Безопасные вызовы и Elvis
  3. Оператор !!
  4. Платформенные типы
← Назад к Kotlin Academy