Безопасность работы с 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— гарантированно никогда не содержит nullString?— может содержать 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 — локальная установка не требуется.
Все уроки этого курса
- Безопасность работы с null
- Классы и объекты
- Классы данных и запечатанные классы
- Функции-расширения и функции высшего порядка