Диапазоны Char и пользовательские диапазоны
Выходите за пределы целых чисел
«Диапазоны Char и пользовательские диапазоны» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Не только целые числа
Диапазоны предназначены не только для Int. Kotlin поддерживает диапазоны символов и других сравнимых типов.
В этом уроке рассматриваются диапазоны символов и то, как пользовательские типы могут работать с rangeTo.
Итоги по диапазонам символов
У символов есть определённый порядок, поэтому 'a'..'z' является допустимым диапазоном.
Можно выполнять перебор, проверять принадлежность и делать многое другое.
fun main() {
for (c in 'a'..'f') print(c)
println()
println('q' in 'a'..'z')
}Проверка символов
Диапазоны символов делают проверку ввода понятной, например при проверке цифр или букв.
fun isDigit(c: Char): Boolean = c in '0'..'9'
fun main() {
println(isDigit('7'))
println(isDigit('x'))
}Подсчёт букв
Можно быстро создать алфавит, перебрав диапазон символов и собрав его значения.
fun main() {
val alphabet = ('a'..'z').toList()
println(alphabet.size)
println(alphabet.first())
println(alphabet.last())
}Диапазоны Long
Диапазоны работают и с типом Long, что удобно для больших числовых интервалов.
Используются те же операторы.
fun main() {
val big = 1L..5L
println(big.sum())
}Диапазоны сравнимых типов
Любой тип Comparable может образовать диапазон с помощью .., хотя такие диапазоны поддерживают только проверку принадлежности, но не перебор.
Например, диапазоны String проверяют лексикографический порядок.
fun main() {
val range = "apple".."mango"
println("cherry" in range)
println("zebra" in range)
}Почему некоторые диапазоны нельзя перебирать
Для перебора нужен определённый шаг. У целых чисел и символов он есть — прибавление 1, — а у строк и чисел с плавающей точкой нет очевидного следующего значения.
Поэтому такие диапазоны поддерживают in, но не циклы for.
fun main() {
val r = 1.0..5.0
println(2.5 in r)
// for (x in r) // not allowed for Double
}Пользовательские типы с rangeTo
Оператор .. вызывает функцию rangeTo. Если Ваш класс реализует Comparable, принадлежность диапазону становится доступной автоматически.
Здесь простая версия класса сравнивается численно.
data class Ver(val n: Int) : Comparable<Ver> {
override fun compareTo(other: Ver) = n - other.n
}
fun main() {
val range = Ver(1)..Ver(5)
println(Ver(3) in range)
println(Ver(9) in range)
}Оператор за кулисами
Запись a..b эквивалентна вызову a.rangeTo(b).
Форма с оператором просто является более удобным синтаксисом той же функции.
fun main() {
val r1 = 1..5
val r2 = 1.rangeTo(5)
println(r1.toList() == r2.toList())
}Выбор подходящего диапазона
Краткие рекомендации:
- Числа и символы → перебор и проверка
- Числа с плавающей точкой и пользовательские сравнимые типы → только проверка принадлежности
- Нужен шаг? Используйте прогрессии целых чисел или символов
fun main() {
println('m' in 'a'..'z')
println(3.5 in 1.0..4.0)
println(50 in 1..100)
}Объединяем всё вместе
Диапазоны обобщаются на множество типов:
- Диапазоны символов позволяют выполнять перебор и проверку
- Диапазоны
Longработают с большими интервалами - Сравнимые и пользовательские типы поддерживают проверку принадлежности
..— это сокращённая запись дляrangeTo
fun main() {
val vowels = "aeiou"
for (c in 'a'..'z') {
if (c in vowels) print(c)
}
println()
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли диапазоны символов и пользовательские диапазоны.
Итоги
Вы изучили диапазоны символов и пользовательские диапазоны:
- Диапазоны символов и
Longперебираются так же, как диапазоныInt - Сравнимые типы поддерживают проверку принадлежности через
.. - Недискретные типы поддерживают проверку
in, но не могут использоваться в цикле ..— это сокращённая запись дляrangeTo
На этом завершается курс «Диапазоны и прогрессии».
Изучай Kotlin с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 51
- Уроки
- 203
Часто задаваемые вопросы
Урок «Диапазоны Char и пользовательские диапазоны» бесплатный?
Да — полный текст урока «Диапазоны Char и пользовательские диапазоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Диапазоны Char и пользовательские диапазоны»?
Выходите за пределы целых чисел Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Диапазоны Char и пользовательские диапазоны»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Операторы диапазонов
- step и downTo
- Диапазоны в циклах
- Диапазоны Char и пользовательские диапазоны