0Pricing
Kotlin Academy · Урок

Типы Nullable и Non-Null

Основы системы типов

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

Почему важна безопасность при работе с null

Знаменитый NullPointerException привёл к сбою бесчисленного количества программ. Kotlin решает эту проблему напрямую, делая возможность null частью системы типов.

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

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

По умолчанию каждый тип в Kotlin не допускает null. Переменная типа String никогда не может содержать null.

Это гарантируется во время компиляции, поэтому Вы можете свободно использовать значение без проверок.

fun main() {
    val name: String = "Alice"
    println(name.length)
}

Присваивание null запрещено

Попробуйте поместить null в тип, не допускающий null, и компилятор немедленно остановит Вас.

Приведённая ниже строка не скомпилируется, потому что String не принимает null:

  • val name: String = null → ошибка
fun main() {
    val city: String = "Paris"
    // val broken: String = null // compile error
    println(city)
}

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

Чтобы разрешить null, добавьте вопросительный знак после типа: String?.

Это тип, допускающий null. Он может содержать как настоящее значение, так и null.

fun main() {
    val maybeName: String? = null
    println(maybeName)
}

Типы, допускающие null, и типы без null

Эти два объявления выглядят почти одинаково, но ведут себя совершенно по-разному:

  • val a: String → никогда не равно null
  • val b: String? → может быть равно null

Один символ ? полностью меняет контракт переменной.

fun main() {
    val a: String = "hi"
    val b: String? = "hi"
    println(a)
    println(b)
}

Компилятор защищает доступ к значениям, допускающим null

Нельзя напрямую вызывать методы у значения, допускающего null. Компилятор запрещает это, потому что значение может быть равно null.

Приведённая ниже закомментированная строка не скомпилировалась бы:

  • maybe.length у типа String? → ошибка
fun main() {
    val maybe: String? = "text"
    // println(maybe.length) // compile error
    println(maybe)
}

Проверка на null

Один из простых способов использовать значение, допускающее null, — явная проверка с помощью if.

Внутри блока if Kotlin знает, что значение не равно null, и позволяет безопасно его использовать.

fun main() {
    val maybe: String? = "hello"
    if (maybe != null) {
        println(maybe.length)
    }
}

null в параметрах функций

Типы параметров тоже подчиняются этому правилу. Параметр типа String должен получать настоящее значение, а String? принимает null.

Благодаря этому сигнатуры функций сами объясняют, какие значения они принимают.

fun greet(name: String?) {
    if (name != null) {
        println("Hello, " + name)
    } else {
        println("Hello, guest")
    }
}

fun main() {
    greet("Mia")
    greet(null)
}

Возвращаемые типы, допускающие null

Функции могут возвращать типы, допускающие null, чтобы показать, что результат может отсутствовать.

После этого вызывающий код обязан обработать возможное значение null перед использованием результата.

fun firstChar(text: String?): Char? {
    if (text == null || text.isEmpty()) return null
    return text[0]
}

fun main() {
    println(firstChar("Kotlin"))
    println(firstChar(null))
}

Автоматический вывод типа

Когда Вы присваиваете литерал, Kotlin автоматически выводит тип, не допускающий null.

  • val n = "text" → выведен тип String

Чтобы сделать тип допускающим null, необходимо явно объявить его с помощью ?.

fun main() {
    val n = "text" // inferred String (non-null)
    val m: String? = "text" // explicit nullable
    println(n.length)
    println(m)
}

Объединяем всё

Система типов разделяет значения на две чёткие группы:

  • Не допускающие null: всегда безопасны для использования
  • Допускающие null: перед использованием требуют обработки

Это различие переносит ошибки, связанные с null, со сбоев во время выполнения на ошибки времени компиляции.

fun main() {
    val safe: String = "always here"
    val risky: String? = null
    println(safe.uppercase())
    if (risky != null) println(risky.uppercase()) else println("no value")
}

Проверка

Проверьте, насколько хорошо Вы понимаете типы, допускающие и не допускающие null.

Итоги

Вы изучили основы безопасности при работе с null в Kotlin:

  • По умолчанию каждый тип не допускает null
  • Добавление ? создаёт тип, допускающий null
  • Компилятор блокирует небезопасный доступ к значениям, допускающим null
  • Проверка if (x != null) позволяет безопасно использовать значение

Далее Вы изучите краткие операторы, которые упрощают работу со значениями, допускающими null.

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

Урок «Типы Nullable и Non-Null» бесплатный?

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

Чему я научусь в уроке «Типы Nullable и Non-Null»?

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

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

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

Сколько времени занимает урок «Типы Nullable и Non-Null»?

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

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

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

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

  1. Типы Nullable и Non-Null
  2. Безопасные вызовы и Elvis
  3. Оператор !!
  4. Платформенные типы
← Назад к Kotlin Academy