Мультиплатформенное программирование

Мультиплатформенные проекты находятся в стадии альфа-тестирования. Языковые функции и инструментарий могут измениться в будущих версиях Kotlin.

Поддержка мультиплатформенного программирования является одним из ключевых преимуществ Kotlin. Это сокращает время, затрачиваемое на написание и поддержку одного и того же кода для разных платформ, сохраняя при этом гибкость и преимущества нативного программирования.

Вот как работает мультиплатформенность в Kotlin:

Мультиплатформенность Kotlin

  • Обычный Kotlin включает в себя язык, основные библиотеки и базовые инструменты. Код, написанный на обычном Kotlin, работает везде на всех платформах;
  • С помощью мультиплатформенных библиотек Kotlin вы можете повторно использовать мультиплатформенную логику в обычном и специфичном для платформы коде. Обычный код может полагаться на набор библиотек, которые охватывают повседневные задачи, такие как HTTP, сериализация и управление корутинами;
  • Для взаимодействия с платформами используйте версии Kotlin для конкретной платформы. Версии Kotlin для конкретной платформы (Kotlin/JVM, Kotlin/JS, Kotlin/Native) включают расширения для языка Kotlin, а также библиотеки и инструменты для конкретной платформы;
  • С помощью этих платформ вы можете получить доступ к встроенному коду платформы (JVM, JS и Native) и использовать все встроенные возможности.

Благодаря мультиплатформенности Kotlin вы можете тратить меньше времени на написание и поддержку одного и того же кода для разных платформ – просто делитесь им, используя механизмы, предоставляемые Kotlin:

Если вам нужно получить доступ к API для конкретной платформы из общего кода, используйте механизм ожидаемых и фактических объявлений.

С помощью этого механизма общий набор источников определяет ожидаемое объявление, а наборы источников платформы должны предоставлять фактическое объявление, соответствующее ожидаемому объявлению. Это работает для большинства объявлений Kotlin, таких как функции, классы, интерфейсы, перечисления, свойства и аннотации.

Ожидаемые и фактические объявления

//Common
expect fun randomUUID(): String
//Android
import java.util.*
actual fun randomUUID() = UUID.randomUUID().toString()
//iOS
import platform.Foundation.NSUUID
actual fun randomUUID(): String = NSUUID().UUIDString()

Примеры использования

Android — iOS

Совместное использование кода между мобильными платформами является одним из основных вариантов использования мультиплатформенности Kotlin. С помощью Kotlin Multiplatform Mobile (KMS) вы можете создавать мультиплатформенные мобильные приложения, совместно использующие один код и в Android, и в iOS, например бизнес-логику, возможности подключения и многое другое.

Смотрите особенности KMM, примеры.

Клиент — Сервер

Другой сценарий, когда совместное использование кода может принести пользу, - это подключенное приложение, в котором логика может быть повторно использована как на стороне сервера, так и на стороне клиента, запущенного в браузере. Это также распространяется на мультиплатформенность Kotlin.

Ktor framework подходит для создания асинхронных серверов и клиентов в связанных системах.

Что дальше?

Недавно начали изучать Kotlin? Посетите Начало работы с Kotlin.

Документация

Руководства

  • Создайте свое первое KMM приложение: узнайте, как создать мобильное приложение, работающее на Android и iOS, с помощью KMM плагина для Android Studio. Создайте, запустите и протестируйте свое первое мультиплатформенное мобильное приложение;
  • Создание мультиплатформенной библиотеки Kotlin: научитесь, как создать мультиплатформенную библиотеку, доступную для JVM, JS и Native, которую можно использовать из любого другого общего кода (например, совместно используемого с Android и iOS). Здесь также описано, как писать тесты, которые будут выполняться на всех платформах, и использовать эффективную реализацию, предоставляемую конкретной платформой;
  • Создание фулстек веб-приложения с помощью мультиплатформенности в Kotlin: изучите концепции создания приложения, ориентированного на Kotlin/JVM и Kotlin/JS, путем создания клиент-серверного приложения, использующего общий код, сериализацию и другие мультиплатформенные парадигмы. Здесь также содержится краткое введение в работу с Ktor как с серверной, так и с клиентской стороны.

Примеры проектов