Операторы is и as
Проверка и приведение типов
«Операторы 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 — локальная установка не требуется.
Все уроки этого курса
- when как выражение
- Умные приведения типов
- Операторы is и as
- Исчерпывающий when