Menu
CoddyTech

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

Часть раздела Основы путешествия по 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

Задание

Легко

Вам предоставлена следующая nullable-переменная:

val message: String? = "Kotlin"

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

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

Затем создайте ещё одну nullable-переменную:

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