Kotlin для початківців: Структури даних — Null-safety
Архів
22 листопада 2022 р.2 хв читанняВостаннє оновлено 11.01.2026Kotlin для початківців
Nullable типи
Ми розглянули об'єкти й тепер прийшов час розглянути випадки, коли у нас можуть бути відсутні якісь дані.
Що таке nullable? Nullable – це властивість типу не обов'язково мати значення, а дозволяти
null (ніщо).kotlin
val string: String? = null
Як ми бачимо, у нас додався знак питання
? після типу, і тепер значення може дорівнювати null.💡 Цікаво знати
В багатьох мовах програмування ви можете отримати помилку прямо під час роботи програми, якщо забудете перевірити, чи є дані. Це називають "помилкою на мільярд доларів". Kotlin змушує вас перевіряти такі змінні ще на етапі написання коду.
Null-safety
Kotlin зобов'язує перевіряти nullable типи перед використанням. Наприклад, ви не можете просто присвоїти
String? змінній типу String:kotlin
fun main() {
val string: String = someFunction() // Помилка: Type mismatch
}
fun someFunction(): String? = null
Smart cast (Розумне приведення)
Найпростіший спосіб — звичайна перевірка через
if. Якщо ми перевірили, що об'єкт не null, Kotlin дозволяє працювати з ним як зі звичайним типом.kotlin
val foo: String? = getFooOrNull()
if (foo != null) {
println(foo.length) // Тут foo вже типу String (не nullable)
}
💡 До речі
Функції, що можуть повернути "ніщо", зазвичай називають за шаблономgetXOrNull(), щоб це було очевидно для розробника.
Safe call (Безпечний виклик) ?.
Якщо об'єкт зліва від
?. дорівнює null, то весь вираз поверне null, а код справа не буде виконуватись.kotlin
val foo: String? = getFooOrNull()
println(foo?.plus("Bar")) // Виведе null, якщо foo було null
Elvis-оператор ?:
Дозволяє вказати значення за замовчуванням, якщо вираз зліва повернув
null.kotlin
val foo: String? = getFooOrNull()
println(foo?.plus("Bar") ?: "Немає даних")
Ви також можете використовувати його для виходу з функції:
kotlin
val foo: String? = getFooOrNull() ?: return
Not-null assertion !! (Double-bang)
Ви кажете компілятору: "Я точно впевнений, що тут не null".
kotlin
val foo: String? = "abc"
println(foo!!.length)
⚠️ Увага
Використовуйте!!дуже обережно. Якщо там все ж таки виявитьсяnull, ваша програма негайно аварійно завершиться.
💡 Лайфхак
Оскільки значенняvarможе змінитись у будь-який момент (наприклад, іншим потоком), смарт-касти для них не працюють. Найкраще створити локальну копію черезval:kotlinval localString = globalString ?: return println(localString) // Тепер localString — це звичайна String
Kotlin для початківців
Вам також може сподобатися
7 хв читання
Kotlin для початківців: Структури даних — Абстракції
Ускладнимо завдання: у нас є притулок з домашніми тваринами, і нам потрібно зберігати уніфіковану інформацію про кожну тварину.
Читати нотатку
2 хв читання
Kotlin для початківців: Основи — Висновок
У цій частині курсу ми розглянули чимало базових тем, які є вже досить вагомим фактором у вивченні як і котліну, так і інших мов.
Читати нотатку