6 подписчиков
«Когда я впервые увидел ?. в Kotlin, подумал, что это ошибка: рассказываю, как перестать бояться null»
Когда я только начинал писать своё приложение TaskFlow, мне казалось, что Kotlin нарочно ставит странные символы, чтобы запутать новичков. Особенно бесил этот ?.. Я думал: “Ну вот, опять опечатка, сейчас всё сломается”. А оказалось, что это не баг, а одна из самых полезных штук в языке. Сейчас покажу, как она работает и почему без неё в Android-разработке никуда.
Представь, что у тебя есть пользователь, но его может и не быть. Например, человек ещё не вошёл в приложение. Если ты попробуешь сразу взять у него имя, приложение может упасть с ошибкой. В Java ты бы писал кучу проверок:
Код в Java:
if (user != null) {
String name = user.getName();
}
В Kotlin можно сделать то же самое короче и безопаснее.
?. — это «безопасный вызов». Он говорит: «Если объект есть — сделай действие, если нет — ничего не делай и не ломай приложение».
Пример на Kotlin:
val name = user?.name
- если "user" есть, "name" получит имя.
- если "user" равен null, "name" будет null, но приложение не упадёт.
Бывает, что нужно достать что-то глубоко внутри: user?.profile?.avatar?.url. Если на любом шаге будет null, вся цепочка просто вернёт null и не вызовет ошибку. Без ?. пришлось бы писать пять вложенных if.
Если видишь ошибку вроде NullPointerException — первым делом проверь, не обращаешься ли ты к объекту напрямую там, где его может не быть. Скорее всего, поможет заменить . на ?..
А у тебя бывало, что приложение падало из-за null, и ты не сразу понимал, в чём дело? Напиши в комментариях, какой самый неожиданный NullPointerException ты ловил — может, вместе придумаем, как его избежать в будущем.
1 минута
30 июля