Библиотеки и API
Чтобы использовать Kotlin с максимальной пользой, применяйте существующие библиотеки и API: так вы сможете больше времени уделять программированию, а не изобретать велосипед.
Библиотеки распространяют повторно используемый код, который упрощает выполнение распространённых задач. В библиотеках пакеты и объекты объединяют связанные классы, функции и служебные средства. Библиотеки предоставляют API (программные интерфейсы приложений) — набор функций, классов или свойств, которые разработчики могут использовать в своём коде.
Давайте узнаем, что можно делать с 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 ещё находится в разработке и может измениться в будущем. Без подтверждения вы увидите предупреждения или ошибки, например такие:
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— срок инвестирования денег (в годах).
Измените код, чтобы:
Импортировать необходимые функции из пакета
kotlin.math.Добавить тело функции
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
}
Упражнение 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
}
Упражнение 3
В последней версии Kotlin появилась новая функция стандартной библиотеки. Вы хотите её попробовать, но для этого требуется подтверждение использования. Эта функция относится к @ExperimentalStdlibApi. Как должно выглядеть подтверждение использования в вашем коде?
Что дальше?
Поздравляем! Вы завершили курс для продолжающих! Хотите поделиться отзывом о своём опыте?
В качестве следующего шага ознакомьтесь с нашими руководствами по популярным приложениям на Kotlin:
-
Создание кроссплатформенного приложения для Android и iOS с нуля и возможность:
© 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