Kotlin/JVM和Kotlin/JS的写法有区别吗?

Differences in writing Kotlin/JVM and Kotlin/JS?

我读了 Big Nerd Ranch 的 Kotlin 指南,它在几个地方谈到了 Kotlin/Java 互操作,但从未谈到 JS 或原生。我在 Java 方面已经有了扎实的背景,所以我已经习惯了在我的 Kotlin 代码中使用 Java 类。我正在尝试编写一个 Kotlin 程序,该程序将 运行 在大多数(如果不是全部)功能是用 JavaScript 编写的网站上,我正在尝试了解如何编写我的代码来制作确保它是可互操作的。我可以在我的 Kotlin/JS 代码中继续使用 Java 类 吗?写Kotlin/JVM代码和写Kotlin/JS代码有什么区别? (ex-) java 程序员在学习使用 Kotlin 与 JS 互操作时应该知道什么?如果最近写的任何好书中有几章这方面的内容,那也会有所帮助。

Kotlin/JS 将 Kotlin 代码(包括它自己的标准库)编译成 Java 脚本代码。最后,您所拥有的只是 Java 脚本。您没有与 Java 虚拟机的任何连接。 Kotlin 的标准库没有提供将 Java 脚本代码桥接到 JVM 以便它可以利用 Java 类 的魔法。所以不,你不能在标准 Kotlin/JS.

中使用 Java 类

正如史蒂夫已经提到的,您不能在 Kotlin/JS.

中使用 java 类

将 Kotlin/JS 视为 Typescript。 它提供了一种不同的语法来编写最终编译为 JS 的代码。

以下是编写 Kotlin/JS 代码与 Kotlin/JVM 代码的显着差异

  • Kotlin/JS 内部使用 yarn 进行依赖管理。这使您能够依赖 npmjs 等上可用的任何 java 脚本模块(请参阅下面的注释)
  • 除了标准库,您还可以利用其他 kotlin-first 框架,例如 kotlinx-serialization、ktor 等
  • 测试库将特定于 JS。因此,您需要熟悉 karma / mocha 系列,而不是 mockito / mockk / junit 系列。
  • 协程功能会有差异 - 无论是在编写代码的方式还是性能预期方面。

我发现阅读 Kotlin Multiplatform 有助于澄清很多关于 kotlin 的功能。

我知道这不是特别被问到的,但是给考虑 Kotlin/JS(截至 20 年 9 月)

的人我的 2 美分
  • 如果您熟悉 Kotlin 并且除了 http i/o (ktor)、React (kotlin-react) 和基本 html 之外没有预见到太多第三方依赖项,那就太好了/ css(由 kotlin-styled 覆盖)。
  • 使用 JS 模块作为依赖项不像使用 JVM 依赖项那样直接,因为没有 ready-made 互操作。在使用它们之前,必须在 kotlin 中 define javascript functions/classes(参见 here)。因此,如果您预见到要利用大量现有的 java 脚本模块,这将不是一个理想的前进方式。
  • 如果你有一个典型的 backend-frontend 模型,后端编译为 JVM,前端编译为 JS,那就太好了。您可以跨后端和​​前端代码(通过 Kotlin Multiplatform)利用通用数据模型和 http i/o 框架。我发现这极大地提高了工作效率!