0Pricing
Android Academy · Урок

Безопасность работы с null

Изучите систему безопасности Kotlin при работе с null: допускающие null типы, оператор безопасного вызова, оператор Элвиса и способы устранения NullPointerExceptions.

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

Ошибка на миллиард долларов

В Java любая переменная может иметь значение null, что во время выполнения вызывает NullPointerException (NPE) — одну из самых распространённых причин сбоев в приложениях Android.

Тони Хоар, придумавший null, назвал это своей ошибкой на миллиард долларов.

Kotlin устраняет NPE ещё во время компиляции благодаря системе безопасности при работе с null.

Типы, допускающие и не допускающие null

В Kotlin типы по умолчанию не допускают null. Чтобы разрешить null, добавьте ? к типу:

  • String — гарантированно никогда не содержит null
  • String? — может содержать null

Компилятор следит за этим и не позволит присвоить null типу, который его не допускает.

Пример типов, допускающих null

Компилятор обнаруживает ошибки, связанные с null, до запуска приложения:

fun main() {
    val name: String = "Alice"   // never null
    // name = null  // COMPILE ERROR

    var nickname: String? = "Al"  // nullable
    nickname = null               // OK

    println(name)
    println(nickname)  // null
}

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

Оператор безопасного вызова ?. вызывает метод, только если объект не равен null. Если объект равен null, оператор возвращает null вместо сбоя.

nickname?.length → возвращает длину или null, если nickname равен null.

Безопасные вызовы в действии

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

fun main() {
    var text: String? = "Hello"
    println(text?.length)   // 5
    println(text?.uppercase()) // HELLO

    text = null
    println(text?.length)   // null (no crash!)
    println(text?.uppercase()) // null
}

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

Оператор Элвиса ?: задаёт значение по умолчанию, если выражение равно null:

val len = text?.length ?: 0

Читайте это так: «длина text или 0, если text равен null».

Название дано в честь эмодзи Элвиса 🕺, причёска которого напоминает ?:.

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

Задавайте безопасные значения по умолчанию с помощью ?::

fun main() {
    var name: String? = "Bob"
    println(name?.length ?: 0)  // 3

    name = null
    println(name?.length ?: 0)  // 0

    val display = name ?: "Anonymous"
    println(display)  // Anonymous
}

Проверка на null с помощью if

Внутри блока if (x != null) Kotlin автоматически выполняет интеллектуальное приведение типа, допускающего null, к типу, который его не допускает — использовать ?. внутри блока не нужно.

Пример интеллектуального приведения

Kotlin уточняет тип после проверки на null:

fun printLength(text: String?) {
    if (text != null) {
        // 'text' is now String (non-nullable) here
        println("Length: ${text.length}") // no ?. needed
    } else {
        println("text is null")
    }
}

fun main() {
    printLength("Kotlin")  // Length: 6
    printLength(null)       // text is null
}

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

Во что вычисляется null?.length ?: -1?

Итоги: безопасность при работе с null

Система безопасности Kotlin при работе с null устраняет NPE:

  • Типы по умолчанию не допускают null; добавьте ?, чтобы разрешить null
  • ?. — безопасный вызов, возвращает null вместо сбоя
  • ?: — оператор Элвиса, задаёт значение по умолчанию при null
  • Интеллектуальное приведение внутри блоков if (x != null)

Далее: структурирование кода с помощью классов и объектов.

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

Урок «Безопасность работы с null» бесплатный?

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

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

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

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

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

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

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

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

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

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

  1. Безопасность работы с null
  2. Классы и объекты
  3. Классы данных и запечатанные классы
  4. Функции-расширения и функции высшего порядка
← Назад к Android Academy