Kotlin Academy · Урок

Операторы is и as

Проверка и приведение типов

Урок 3 из 413 шагов

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

Проверка и приведение типов

Kotlin предоставляет два оператора для работы с типами во время выполнения:

  • is проверяет, имеет ли значение определённый тип
  • as приводит значение к определённому типу

У обоих есть безопасные варианты, которые Вы изучите в этом уроке.

Оператор is

is возвращает логическое значение, сообщающее, соответствует ли значение определённому типу.

Он лежит в основе умных приведений.

fun main() {
    val x: Any = "hello"
    println(x is String)
    println(x is Int)
}

Отрицательная проверка с помощью !is

Используйте !is, чтобы проверить, что значение имеет тип NOT.

В защитных условиях это читается естественно.

fun main() {
    val x: Any = 42
    if (x !is String) {
        println("not a string")
    }
}

Оператор as

as выполняет явное приведение. Если значение действительно имеет этот тип, Вы получаете его с правильным типом.

Используйте его, когда компилятор не может определить тип самостоятельно.

fun main() {
    val x: Any = "hello"
    val s = x as String
    println(s.length)
}

Когда as завершается ошибкой

Если значение не имеет целевого типа, as выбрасывает исключение ClassCastException.

Это небезопасный вариант, поэтому используйте его только при полной уверенности.

fun main() {
    val x: Any = 42
    try {
        val s = x as String
        println(s)
    } catch (e: ClassCastException) {
        println("Cannot cast Int to String")
    }
}

Безопасное приведение as?

as? — это безопасное приведение. Оно возвращает значение, приведённое к нужному типу, или null, если приведение невозможно.

Исключение не возникает.

fun main() {
    val x: Any = 42
    val s = x as? String
    println(s)
}

Безопасное приведение с Elvis

Сочетайте as? с Elvis, чтобы задать запасной вариант при неудачном приведении.

Это аккуратный шаблон, не приводящий к сбою приложения.

fun main() {
    val x: Any = 42
    val s = (x as? String) ?: "default"
    println(s)
}

is запускает умные приведения

После проверки is обычно вообще не нужно использовать as, поскольку включаются умные приведения.

Используйте явное as только тогда, когда умное приведение неприменимо.

fun main() {
    val x: Any = "smart"
    if (x is String) {
        println(x.uppercase()) // smart cast, no as needed
    }
}

Приведение типов в коллекциях

Безопасные приведения полезны при фильтрации коллекций со смешанными типами.

filterIsInstance использует is внутри, чтобы оставить только подходящие элементы.

fun main() {
    val items: List<Any> = listOf(1, "two", 3, "four")
    val strings = items.filterIsInstance<String>()
    println(strings)
}

Выбор подходящего оператора

Простое руководство:

  • Нужно логическое значение? Используйте is
  • Уверены в типе? Используйте as
  • Не уверены? Используйте as? с запасным вариантом
fun describe(x: Any): String {
    val text = x as? String ?: return "not text"
    return "text of length " + text.length
}

fun main() {
    println(describe("hello"))
    println(describe(99))
}

Соберём всё вместе

Операторы типов дают Вам полный контроль:

  • is / !is проверяют типы
  • as выполняет приведение, но может выбросить исключение
  • as? безопасно выполняет приведение и возвращает null при неудаче
fun main() {
    val values: List<Any> = listOf(1, "hi", 2.5)
    for (v in values) {
        when {
            v is Int -> println("int " + v)
            v is String -> println("string " + v)
            else -> println("other")
        }
    }
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли операторы is и as.

Итоги

Вы изучили операторы типов:

  • is и !is используются для проверки типов
  • as — для приведений, которые могут выбросить исключение
  • as? — для безопасных приведений, возвращающих null

Далее Вы научитесь делать when исчерпывающим, чтобы охватить все случаи.

Можно начать бесплатно

Изучай Kotlin с ИИ-репетитором — бесплатно

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

Курсы
51
Уроки
203

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

Урок «Операторы is и as» бесплатный?

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

Чему я научусь в уроке «Операторы is и as»?

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

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

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

Сколько времени занимает урок «Операторы is и as»?

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

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

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

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

  1. when как выражение
  2. Умные приведения типов
  3. Операторы is и as
  4. Исчерпывающий when
← Назад к Kotlin Academy