问题描述
我阅读了有关Kotlin的Big Nerd Ranch指南,并且在许多地方都谈到了Kotlin / Java互操作,但从未谈论过JS或本机。我已经具有扎实的Java背景知识,因此我已经习惯于在Kotlin代码中使用java类。我试图编写一个Kotlin程序,该程序将在大多数(如果不是全部)功能都是使用JavaScript编写的网站上运行,并且我试图了解如何编写代码以确保其可互操作。我可以继续在Kotlin / JS代码中使用java类吗?编写Kotlin / JVM代码和Kotlin / JS代码有什么区别? (前)Java程序员在学习使用Kotlin与JS互操作时应该知道什么?如果最近写的任何好书中都有关于这一点的章节,那也将有所帮助。
解决方法
Kotlin / JS将Kotlin代码(包括其自己的标准库)编译为Javascript代码。最后,您只有Javascript。您所没有的就是与Java虚拟机的任何连接。 Kotlin的标准库不提供将Javascript代码桥接到JVM的任何魔力,因此它可以利用Java类。所以不,您不能在标准Kotlin / JS中使用Java类。
,正如史蒂夫已经提到的那样,您不能在Kotlin / JS中使用Java类。
将Kotlin / JS视为打字稿。 它提供了不同的语法来编写最终可编译为JS的代码。
以下是编写Kotlin / JS代码与Kotlin / JVM代码的显着差异
- Kotlin / JS内部使用yarn进行依赖项管理。这使您能够依赖npmjs等上可用的任何javascript模块(请参见下面的注释)
- 除了标准库外,您还可以利用其他kotlin-first框架,例如kotlinx-serialization,ktor等
- 测试库将特定于JS。因此,您需要熟悉karma / mocha家族,而不是mockito / mockk / junit家族。
- 协程的功能将有所不同-无论是在编写代码的方式还是在性能预期方面。
我发现阅读有关Kotlin Multiplatform的内容有助于阐明很多关于kotlin的功能。
我知道这不是特别要问的,而是给考虑使用Kotlin / JS的人2仙(截至20年9月)
- 如果您熟悉Kotlin,并且除了http i / o(ktor),React(kotlin-react)和基本的html / css(由kotlin样式覆盖)之外,没有预见到太多的第三方依赖,那就太好了。
- 使用JS模块作为依赖项并不像使用JVM依赖项那样简单,因为没有现成的互操作。在使用它们之前,必须先在Kotlin中
define
个javascript函数/类(请参阅here)。因此,如果您预见到会利用许多现有的javascript模块,那将不是理想的前进方式。 - 如果您有一个典型的后端-前端模型,其中后端可编译为JVM,而前端则可编译为JS,则非常好。您可以在后端和前端代码之间(通过Kotlin Multiplatform)利用通用数据模型和http i / o框架。我发现这极大地提高了生产力!