Что такое null/nil в Kotlin и как с ним работать?
Всем привет! Начал изучать Kotlin после Java и никак не могу до конца разобраться с концепцией null в этом языке. В Java null — это обычная ссылка, которая может быть присвоена любому объекту, и мы постоянно боремся с NullPointerException. В Kotlin же, как я понял, типы по умолчанию non-null, и для работы с null нужно использовать специальные конструкции.
У меня есть несколько конкретных вопросов и проблем:
- Правильно ли я понимаю, что
String?(с вопросительным знаком) — это nullable тип, аString— non-null? И если я попытаюсь присвоить null переменной типаStringбез вопросительного знака, то будет ошибка компиляции? - Я попробовал написать простой код, но он не компилируется:
fun main() {
val name: String? = null
println(name.length) // Ошибка: Only safe (?.) or non-null asserted (!!.) calls are allowed
}Я ожидал, что будет выброшено исключение во время выполнения, как в Java, но компилятор не дает даже запустить код. Как правильно обратиться к свойству nullable переменной?
- Я знаю про операторы
?.(safe call),!!(not-null assertion) и?:(elvis). Но когда какой использовать? Например, я хочу получить длину строки или вернуть -1, если строка null. Какой способ считается идиоматичным в Kotlin?
Пробовал читать документацию, но примеры там слишком простые. Буду благодарен за развернутое объяснение с примерами, особенно про разницу между ?. и !! в контексте цепочек вызовов. Заранее спасибо!
Ответов пока нет.
Войдите чтобы оставить ответ