Что такое стандартная библиотека Kotlin?
Стандартная библиотека Kotlin (kotlin-stdlib) — это набор модулей, входящих в состав языка и предоставляющих разработчику готовые решения для повседневных задач. В отличие от Java, где многие вещи приходится писать вручную или подключать сторонние библиотеки, Kotlin предлагает мощные встроенные средства для работы с коллекциями, строками, потоками, корутинами и сериализацией. Библиотека полностью совместима с Java, но при этом расширяет её возможности, делая код более лаконичным и безопасным.
Основные модули стандартной библиотеки
- kotlin-stdlib — ядро библиотеки: коллекции, ranges, sequences, стандартные функции (let, apply, also, run).
- kotlinx-coroutines — поддержка асинхронного программирования через корутины.
- kotlinx-serialization — сериализация/десериализация в JSON, Protobuf и другие форматы.
- kotlin-test — инструменты для модульного тестирования.
- kotlin-reflect — рефлексия и работа с типами во время выполнения.
Коллекции и последовательности
Одно из сильнейших мест Kotlin — это работа с коллекциями. Библиотека предлагает как изменяемые (mutable), так и неизменяемые (immutable) коллекции. Все основные операции (фильтрация, преобразование, группировка) реализованы в виде функций-расширений.
Пример: работа со списками
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenSquares = numbers
.filter { it % 2 == 0 }
.map { it * it }
.sortedDescending()
println(evenSquares) // [36, 16, 4]
В этом примере мы используем цепочку вызовов: фильтрация, преобразование и сортировка. Все операции выполняются лениво до момента вызова терминальной операции (в данном случае — печати). Для больших наборов данных рекомендуется использовать Sequence.
Sequences для ленивых вычислений
val largeList = (1..1_000_000).toList()
val result = largeList.asSequence()
.filter { it % 2 == 0 }
.map { it * 2 }
.take(10)
.toList()
println(result) // [4, 8, 12, 20, 24, 28, 32, 36, 40]
В отличие от обычных коллекций, Sequence не создаёт промежуточных списков, что экономит память при работе с большими объёмами данных.
Корутины: асинхронность без боли
Модуль kotlinx-coroutines — это стандартный способ работы с асинхронным кодом в Kotlin. Он заменяет колбэки и RxJava, предоставляя простой последовательный синтаксис.
Простой пример корутины
import kotlinx.coroutines.*
fun main() = runBlocking {
val result = async {
delay(1000L)
"Готово!"
}
println("Ожидание...")
println(result.await()) // "Готово!" через 1 секунду
}
Ключевые понятия:
runBlocking— блокирует текущий поток до завершения корутины (используется в main).async— запускает корутину и возвращаетDeferred(аналог Future).await— приостанавливает корутину до получения результата.
Структурированная конкурентность
fun main() = runBlocking {
launch {
repeat(3) { i ->
delay(500L)
println("Задача $i завершена")
}
}
println("Главная корутина продолжает работу")
}
Благодаря структурированной конкурентности, все дочерние корутины автоматически завершаются при завершении родительской. Это предотвращает утечки памяти и делает код предсказуемым.
Сериализация данных (kotlinx.serialization)
Модуль kotlinx-serialization позволяет конвертировать объекты Kotlin в JSON, XML, Protobuf и другие форматы без использования рефлексии. Сериализация работает на этапе компиляции, что делает её быстрой и безопасной.
Пример сериализации в JSON
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(val name: String, val age: Int)
fun main() {
val user = User("Анна", 25)
val json = Json.encodeToString(user)
println(json) // {"name":"Анна","age":25}
val decoded = Json.decodeFromString<User>(json)
println(decoded