Spec-Zone.ru › Kotlin 2

Библиотеки и API

Чтобы использовать Kotlin с максимальной пользой, применяйте существующие библиотеки и API: так вы сможете больше времени уделять программированию, а не изобретать велосипед.

Библиотеки распространяют повторно используемый код, который упрощает выполнение распространённых задач. В библиотеках пакеты и объекты объединяют связанные классы, функции и служебные средства. Библиотеки предоставляют API (программные интерфейсы приложений) — набор функций, классов или свойств, которые разработчики могут использовать в своём коде.

Kotlin libraries and APIs

Давайте узнаем, что можно делать с Kotlin.

Стандартная библиотека

В Kotlin есть стандартная библиотека, которая предоставляет необходимые типы, функции, коллекции и служебные средства, помогая писать лаконичный и выразительный код. Большая часть стандартной библиотеки (всё, что находится в пакете kotlin) доступна в любом файле Kotlin без необходимости явно импортировать её:

fun main() {
    val text = "emosewa si niltoK"
    
   // Use the reversed() function from the standard library
    val reversedText = text.reversed()

    // Use the print() function from the standard library
    print(reversedText)
    // Kotlin is awesome
}

Однако для использования некоторых частей стандартной библиотеки в коде требуется импорт. Например, чтобы воспользоваться средствами измерения времени из стандартной библиотеки, нужно импортировать пакет kotlin.time.

В начале файла добавьте ключевое слово import, а затем укажите нужный пакет:

import kotlin.time.*

Звёздочка * — это подстановочный импорт, который указывает Kotlin импортировать всё содержимое пакета. Для объектов-компаньонов нельзя использовать звёздочку *. Вместо этого нужно явно объявить члены объекта-компаньона, которые вы хотите использовать.

Например:

import kotlin.time.Duration
import kotlin.time.Duration.Companion.hours
import kotlin.time.Duration.Companion.minutes

fun main() {
    val thirtyMinutes: Duration = 30.minutes
    val halfHour: Duration = 0.5.hours
    println(thirtyMinutes == halfHour)
    // true
}

В этом примере:

  • Импортируются класс Duration и свойства-расширения hours и minutes из его объекта-компаньона.

  • Свойство minutes используется для преобразования 30 в Duration длительностью 30 минут.

  • Свойство hours используется для преобразования 0.5 в Duration длительностью 30 минут.

  • Проверяется, равны ли обе длительности, и выводится результат.

Сначала поищите, потом создавайте

Прежде чем писать собственный код, проверьте, нет ли нужного вам решения в стандартной библиотеке. Ниже перечислены области, для которых стандартная библиотека уже предоставляет различные классы, функции и свойства:

  • Коллекции

  • Последовательности

  • Обработка строк

  • Работа со временем

Чтобы узнать, что ещё входит в стандартную библиотеку, изучите её справочник API.

Библиотеки Kotlin

Стандартная библиотека охватывает множество распространённых задач, но не все. К счастью, команда Kotlin и всё сообщество разработали широкий спектр библиотек, дополняющих стандартную библиотеку. Например, kotlinx-datetime помогает работать со временем на разных платформах.

Полезные библиотеки можно найти на нашей платформе поиска. Чтобы использовать их, потребуется выполнить дополнительные действия, например добавить зависимость или плагин. Для каждой библиотеки есть репозиторий GitHub с инструкциями по её подключению к проектам Kotlin.

Добавив библиотеку, вы сможете импортировать любой содержащийся в ней пакет. Вот пример импорта пакета kotlinx-datetime для получения текущего времени в Нью-Йорке:

import kotlinx.datetime.*

fun main() {
    val now = Clock.System.now() // Get current instant
    println("Current instant: $now")

    val zone = TimeZone.of("America/New_York")
    val localDateTime = now.toLocalDateTime(zone)
    println("Local date-time in NY: $localDateTime")
}

В этом примере:

  • Импортируется пакет kotlinx.datetime.

  • Функция Clock.System.now() используется для создания экземпляра класса Instant, содержащего текущее время; результат присваивается переменной now.

  • Выводится текущее время.

  • Функция TimeZone.of() используется для получения часового пояса Нью-Йорка; результат присваивается переменной zone.

  • Для экземпляра с текущим временем вызывается функция .toLocalDateTime(), которой в качестве аргумента передаётся часовой пояс Нью-Йорка.

  • Результат присваивается переменной localDateTime.

  • Выводится время с учётом часового пояса Нью-Йорка.

Подробнее о функциях и классах, используемых в этом примере, см. в справочнике API.

Подтверждение использования API

Авторы библиотек могут помечать некоторые API как требующие подтверждения использования перед тем, как вы сможете применять их в коде. Обычно это делается, если API ещё находится в разработке и может измениться в будущем. Без подтверждения вы увидите предупреждения или ошибки, например такие:

This declaration needs opt-in. Its usage should be marked with '@...' or '@OptIn(...)'

Чтобы подтвердить использование API, напишите @OptIn, а затем в скобках укажите имя класса, обозначающего API, добавив после него два двоеточия :: и class.

Например, функция uintArrayOf() из стандартной библиотеки относится к @ExperimentalUnsignedTypes, как указано в справочнике API:

@ExperimentalUnsignedTypes
inline fun uintArrayOf(vararg elements: UInt): UIntArray

В коде подтверждение использования выглядит так:

@OptIn(ExperimentalUnsignedTypes::class)

Вот пример подтверждения использования функции uintArrayOf() для создания массива беззнаковых целых чисел и изменения одного из его элементов:

@OptIn(ExperimentalUnsignedTypes::class)
fun main() {
    // Create an unsigned integer array
    val unsignedArray: UIntArray = uintArrayOf(1u, 2u, 3u, 4u, 5u)

    // Modify an element
    unsignedArray[2] = 42u
    println("Updated array: ${unsignedArray.joinToString()}")
    // Updated array: 1, 2, 42, 4, 5
}

Это самый простой способ подтвердить использование API, но есть и другие. Подробнее см. в разделе Требования к подтверждению использования API.

Практика

Упражнение 1

Вы разрабатываете финансовое приложение, которое помогает пользователям рассчитывать будущую стоимость своих инвестиций. Формула расчёта сложных процентов:

Где:

  • A — сумма денег, накопленная с учётом процентов (основная сумма + проценты).

  • P — основная сумма (первоначальная инвестиция).

  • r — годовая процентная ставка (в десятичном виде).

  • n — количество начислений процентов в год.

  • t — срок инвестирования денег (в годах).

Измените код, чтобы:

  1. Импортировать необходимые функции из пакета kotlin.math.

  2. Добавить тело функции calculateCompoundInterest(), вычисляющее итоговую сумму с учётом сложных процентов.

// Write your code here

fun calculateCompoundInterest(P: Double, r: Double, n: Int, t: Int): Double {
    // Write your code here
}

fun main() {
    val principal = 1000.0
    val rate = 0.05
    val timesCompounded = 4
    val years = 5
    val amount = calculateCompoundInterest(principal, rate, timesCompounded, years)
    println("The accumulated amount is: $amount")
    // The accumulated amount is: 1282.0372317085844
}

import kotlin.math.* fun calculateCompoundInterest(P: Double, r: Double, n: Int, t: Int): Double { return P * (1 + r / n).pow(n * t) } fun main() { val principal = 1000.0 val rate = 0.05 val timesCompounded = 4 val years = 5 val amount = calculateCompoundInterest(principal, rate, timesCompounded, years) println("The accumulated amount is: $amount") // The accumulated amount is: 1282.0372317085844 }

Упражнение 2

Вы хотите измерить время выполнения нескольких задач по обработке данных в своей программе. Измените код, добавив необходимые инструкции импорта и функции из пакета kotlin.time:

// Write your code here

fun main() {
    val timeTaken = /* Write your code here */ {
        // Simulate some data processing
        val data = List(1000) { it * 2 }
        val filteredData = data.filter { it % 3 == 0 }

        // Simulate processing the filtered data
        val processedData = filteredData.map { it / 2 }
        println("Processed data")
    }

    println("Time taken: $timeTaken") // e.g. 16 ms
}
import kotlin.time.measureTime fun main() { val timeTaken = measureTime { // Simulate some data processing val data = List(1000) { it * 2 } val filteredData = data.filter { it % 3 == 0 } // Simulate processing the filtered data val processedData = filteredData.map { it / 2 } println("Processed data") } println("Time taken: $timeTaken") // e.g. 16 ms }

Упражнение 3

В последней версии Kotlin появилась новая функция стандартной библиотеки. Вы хотите её попробовать, но для этого требуется подтверждение использования. Эта функция относится к @ExperimentalStdlibApi. Как должно выглядеть подтверждение использования в вашем коде?

@OptIn(ExperimentalStdlibApi::class)

Что дальше?

Поздравляем! Вы завершили курс для продолжающих! Хотите поделиться отзывом о своём опыте?

В качестве следующего шага ознакомьтесь с нашими руководствами по популярным приложениям на Kotlin:

  • Создание серверного приложения на Spring Boot и Kotlin

  • Создание кроссплатформенного приложения для Android и iOS с нуля и возможность:

    • Повторно использовать бизнес-логику, сохраняя нативный интерфейс

    • Повторно использовать бизнес-логику и интерфейс

  • Предыдущий шаг

1 июля 2026 г.
Безопасность работы с nullЧто нового в Kotlin 2.4.20

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/kotlin-tour-intermediate-libraries-and-apis.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API