Menu
Coddy logo textTech

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

Часть раздела Основы путешествия по Kotlin на Coddy. Урок 14 из 93.

Если у вас есть переменная, допускающая значение null, вы не можете напрямую вызывать её методы или обращаться к её свойствам: компилятор этого не позволит, поскольку значение может быть null. Оператор безопасного вызова ?. элегантно решает эту проблему.

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

fun main() {
    val name: String? = "Alice"
    val length = name?.length  // Возвращает 5
    println(length)
    
    val nullName: String? = null
    val nullLength = nullName?.length  // Возвращает null (без краша!)
    println(nullLength)
}

Оператор безопасного вызова проверяет, равно ли значение null, прежде чем обратиться к свойству или методу. Если значение равно null, всё выражение возвращает null вместо аварийного завершения. Если значение существует, оператор работает так же, как обычный вызов.

Вы также можете объединять несколько безопасных вызовов в цепочку:

fun main() {
    val text: String? = "Hello"
    val result = text?.uppercase()?.length
    println(result)  // Выводит: 5
}

Если какая-либо часть цепочки равна null, всё выражение безопасно возвращает null, не вызывая ошибки.

challenge icon

Задание

Легко

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

val message: String? = "Kotlin"

Используйте оператор безопасного вызова, чтобы:

  1. Получить длину message и вывести её
  2. Преобразовать message в верхний регистр и вывести результат

Затем создайте ещё одну переменную, допускающую значение null:

val empty: String? = null

Используйте оператор безопасного вызова, чтобы получить длину empty и вывести её.

Каждый результат должен выводиться в отдельной строке. Помните: оператор безопасного вызова возвращает null, когда значение равно null.

Попробуйте сами

fun main() {
    val message: String? = "Kotlin"
    
    // TODO: Используйте оператор безопасного вызова, чтобы получить длину message и вывести её
    
    // TODO: Используйте оператор безопасного вызова, чтобы преобразовать message в верхний регистр и вывести его
    
    val empty: String? = null
    
    // TODO: Используйте оператор безопасного вызова, чтобы получить длину empty и вывести её
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Песочница Kotlin