Стандартная библиотека Kotlin: полный обзор
Стандартная библиотека Kotlin (stdlib) — это мощный набор инструментов, встроенный прямо в язык. Она предоставляет всё необходимое для повседневной разработки: от работы с коллекциями и строками до корутин и сериализации. В отличие от Java, Kotlin избавляет от шаблонного кода, предлагая лаконичный и выразительный синтаксис. В этом обзоре мы разберём ключевые модули stdlib с практическими примерами.
1. Работа с коллекциями
Библиотека предлагает неизменяемые (List, Set, Map) и изменяемые (MutableList, MutableSet, MutableMap) коллекции с богатым набором функций высшего порядка.
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]
val even = numbers.filter { it % 2 == 0 } // [2, 4]
val sum = numbers.reduce { acc, i -> acc + i } // 15
Ключевые функции:
map,filter,flatMap— трансформация и фильтрацияgroupBy,partition— группировка элементовzip,unzip— объединение коллекцийchunked,windowed— разбиение на части
2. Строки и регулярные выражения
Kotlin расширяет String методами, отсутствующими в Java: удаление префиксов/суффиксов, проверка на пустоту, шаблоны.
val text = " Hello, Kotlin! "
println(text.trim()) // "Hello, Kotlin!"
println(text.removePrefix(" ")) // "Hello, Kotlin! "
println(text.contains(Regex("Kotlin"))) // true
// Многострочные строки с trimIndent
val json = """
{
"name": "Kotlin",
"year": 2016
}
""".trimIndent()
3. Null-безопасность и элвис-оператор
Одна из ключевых фич Kotlin — встроенная защита от NPE. Стандартная библиотека предоставляет функции безопасного вызова (?.let) и элвис-оператор (?:).
val name: String? = getUserName()
val length = name?.length ?: 0 // если name == null, то 0
name?.let { println("Name is $it") } // выполняется только если name != null
4. Корутины (kotlinx.coroutines)
Хотя корутины формально являются отдельной библиотекой, они считаются частью экосистемы Kotlin. Позволяют писать асинхронный код синхронно.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
Основные компоненты:
launch— запуск корутины без возврата значенияasync— запуск с возвратомDeferredwithContext— переключение контекста (например, на UI поток)- Каналы (
Channel) — для передачи данных между корутинами
5. Сериализация (kotlinx.serialization)
Встроенная поддержка JSON, Protobuf, CBOR и других форматов через аннотации.
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(val name: String, val age: Int)
fun main() {
val user = User("Alice", 30)
val json = Json.encodeToString(user)
println(json) // {"name":"Alice","age":30}
val decoded = Json.decodeFromString<User>(json)
println(decoded) // User(name=Alice, age=30)
}
6. Потоки и последовательности
Для ленивых вычислений используйте Sequence вместо List — это экономит память при работе с большими данными.
val seq = generateSequence(1) { it + 1 } // бесконечная последовательность
.take(10)
.filter { it % 2 == 0 }
.toList()
println(seq) // [2, 4, 6, 8, 10]
Функции-расширения для потоков (java.util.stream) также доступны:
Также в библиотеке
Рекомендаций