Различия в написании Kotlin / JVM и Kotlin / JS?

#kotlin #kotlin-multiplatform #kotlin-js #kotlin-interop

#kotlin #kotlin-мультиплатформенный #kotlin-js #kotlin-взаимодействие

Вопрос:

Я прочитал руководство Big Nerd Ranch по Kotlin, и в нем в нескольких местах говорилось о взаимодействии Kotlin / Java, но никогда о JS или native. У меня уже был солидный опыт работы с Java, поэтому я привык использовать классы Java в своем коде Kotlin. Я пытаюсь написать программу Kotlin, которая будет запускаться на сайте, где большая часть, если не вся функциональность, написана на JavaScript, и я пытаюсь понять, как написать свой код, чтобы убедиться, что он совместим. Смогу ли я продолжать использовать классы Java в моем коде Kotlin / JS? В чем разница между написанием кода Kotlin / JVM и кода Kotlin / JS? Что должен знать (бывший) java-программист, когда учится взаимодействовать с JS с помощью Kotlin? Если в каких-либо хороших книгах, написанных в недавнем прошлом, есть несколько глав об этом, это также было бы полезно.

Ответ №1:

Как уже упоминал Стив, вы не можете использовать классы Java в Kotlin / JS.

Думайте о Kotlin / JS как о Typescript. Он предоставляет другой синтаксис для написания кода, который в конечном итоге компилируется в JS.

Вот заметные различия в написании кода Kotlin / JS и кода Kotlin / JVM

  • Kotlin / JS внутренне использует yarn для управления зависимостями. Это позволяет вам зависеть от любого модуля javascript, доступного в npmjs и т. Д. (см. Примечание ниже)
  • В дополнение к стандартной библиотеке вы также можете использовать другие фреймворки, основанные на kotlin, такие как kotlinx-сериализация, ktor и т. Д
  • Тестирование библиотек будет зависеть от JS. Итак, вместо семейства mockito / mockk / junit вам нужно ознакомиться с семейством karma / mocha.
  • Будут различия в возможностях сопрограммы — как с точки зрения способа написания кода, так и ожидаемой производительности.

Я обнаружил, что чтение о мультиплатформенности Kotlin помогло многое прояснить о возможностях kotlin.

Я знаю, что об этом специально не спрашивали, но я даю свои 2цента людям, рассматривающим Kotlin / JS (по состоянию на 20 сентября)

  • Отлично, если вы знакомы с Kotlin и не предполагаете слишком большого количества сторонних зависимостей, кроме http i / o (ktor), React (kotlin-react) и базового html / css (в стиле kotlin).
  • Использование модулей JS в качестве зависимостей не так просто, как использование зависимостей JVM, поскольку нет готового взаимодействия. Перед define их использованием необходимо использовать функции / классы javascript в kotlin (см. Здесь ). Поэтому, если вы предполагаете использовать множество существующих модулей javascript, это не будет идеальным способом продвижения вперед.
  • Отлично, если у вас типичная модель бэкэнд-интерфейса, где бэкэнд компилируется в JVM, а интерфейс компилируется в JS. Вы можете использовать общую модель данных и инфраструктуру HTTP-ввода-вывода для внутреннего и внешнего кода (через мультиплатформенность Kotlin). Я обнаружил, что это огромный прирост производительности!

Ответ №2:

Kotlin / JS компилирует код Kotlin, включая собственную стандартную библиотеку, в код Javascript. В конце концов, все, что у вас есть, это Javascript. Чего у вас нет, так это какого-либо подключения к виртуальной машине Java. Стандартная библиотека Kotlin не предоставляет никаких возможностей для подключения кода Javascript к JVM, чтобы он мог использовать классы Java. Итак, НЕТ, вы не можете использовать классы Java в стандартном Kotlin / JS.