Стандартная библиотека Kotlin: полный обзор

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое стандартная библиотека 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                    

Рекомендаций