Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Data Science Early Access Program IntelliJ IDEA Releases

隆重推出 Kotlin Notebook

Read this post in other languages:

IntelliJ IDEA 的 Kotlin Notebook 插件的第一个实验版本现已推出! 本文将深入探讨插件的功能和用例,但在开始之前,我们想先让插件介绍一下自己:


什么是 Kotlin Notebook 插件?

Notebook 是一种交互式工具,能够将代码、可视化和文本组合到单个文档中。 在 Notebook 中,您可以在一个地方编写并运行代码段(单元)、查看结果,以及记录思维过程。

Notebook 已在快速原型设计、分析和数据科学领域得到广泛采用和信赖。 Kotlin Notebook 插件为 IntelliJ IDEA 带来了交互式开发的强大功能,补充了 IDE 对 Kotlin 语言支持的全部功能,并结合了浏览器的灵活可视化。

接下来,我们深入技术细节,看一看这个插件的作用和运作方式。

安装

要获取插件,只需从 IntelliJ IDEA Ultimate 的 Settings | Plugins(设置 | 插件)标签页中的 Marketplace 安装。 您最低应当使用 2023.1.2 版本的 IntelliJ IDEA。 虽然您可以在先前的版本上安装插件,但这会导致运行不稳定。

安装期间,您将看到安装 Python 插件的建议,请接受。 别担心,这不会在您的工作站上安装 Python。 Kotlin Notebook 只是对位于 Python 插件中的 UI 组件有一些依赖。 我们计划尽快移除这些依赖项。

请注意,Kotlin Notebook 插件目前仅适用于 IntelliJ IDEA Ultimate。

熟悉 Kotlin Notebook

安装插件后,您就可以创建您的第一个 Notebook 了。 本质上,Notebook 只是磁盘上的一个文件,因此可以由 New | Kotlin Notebook(新建 | Kotlin Notebook)操作在 Project(项目)视图中的任何位置创建。

将创建一个扩展名为 .ipynb 的文件。 如果您经常使用 Jupyter Notebook,那么您应该对这个扩展名非常熟悉。 在内部,Kotlin Notebook 遵循相同的结构、格式和协议,因此这些文件可以在 GitHub 上或在安装了 Kotlin 内核的 Jupyter Notebook 或 JupyterLab 中查看。 

创建后,Notebook 仅包含第一个空单元。 单元是 Notebook 的主要组成部分,可以包含代码或文本。 要运行代码单元,只需将其选中,然后点击 Run(运行)按钮或使用 Shift + Enter 快捷键。 代码将被执行,输出或错误将在单元下方显示。

您还可以在 Markdown 单元中编写文本,它支持丰富的格式设置选项,例如标题、列表、链接、LaTeX 和图像。 要呈现 Markdown 单元和查看格式化文本,只需以与运行代码单元相同的方式运行。

Notebook 提供了交互式迭代工作流。 您可以按任意顺序执行单元、修改代码或文本、声明和重新声明变量,以及重新运行单元来查看更新的结果。 这可以让您轻松进行实验、制作原型和记录工作。

我们建议您下载并探索此 Notebook,亲身体验使用 Notebook 进行代码解释和文档记录的优势。 它演示了本文所述 Kotlin Notebook 的所有方面,让您将理论与实践相结合。

示例 Notebook

 

使用 Notebook 是熟悉 Notebook 的最好方式! ;-)

 

 

输出

使 Notebook 脱颖而出的一项关键特性是其支持多种输出类型:

  • 文本:这是最简单的输出类型,包括打印语句、变量值或代码中任何基于文本的输出。 如果单元结果不属于以下类别,它将通过 toString() 方法打印为文本。
  • HTML:Jupyter Notebook 可以直接呈现 HTML,支持富文本格式、使用表,甚至网站嵌入。
  • 图像:静态图像支持 PNG、JPEG、SVG 等格式。 BufferedImage 类型的结果也受支持。 所有图像都可以是来自文件、生成的图表或其他视觉媒体的图像。
  • 富文本:Markdown 单元生成富文本 HTML 输出,提供对列表、字体样式、代码块等的支持。
  • LaTeX:使用学术界广泛使用的排版系统 LaTeX 可以精美呈现数学公式和方程。
  • 错误和回溯:如果代码包含错误,Notebook 会显示错误消息和回溯,为调试提供洞察。

Notebook 依赖项

考虑 Notebook 将具有哪些依赖项也很重要。 显然,标准库可以开箱即用,但通常不够。 您有多种选择:

  • 您可以利用项目的依赖项,确保 Notebook 可以访问相同的类。
  • 可以在 Notebook 中使用项目本身的类和其他实体。 但是,在这种情况下,在执行每个单元之前,将检查项目是否存在更改,并在必要时重新编译。
  • 您可以在任何单元中使用一段 Gradle 样式的语法指定坐标,从 Maven 仓库加载任何库。
USE {
  repositories {
  maven {
    url = "https://my.secret.repo/maven/"
    credentials {
      username = USER
      password = TOKEN
    } 
  }
  dependencies {
    val ktorVersion = "2.0.3"
    implementation("my.secret:artifact:1.0-beta")
    implementation("io.ktor:ktor-client-core-jvm:$ktorVersion")
    implementation("io.ktor:ktor-client-apache-jvm:$ktorVersion")
  }
}
  • 或者,您也可以通过 DependsOn 注解使用较短的版本:
@file:DependsOn(“io.ktor:ktor-client-core-jvm:$ktorVersion“)
  • 记住和定位 Maven 坐标可能较为麻烦。 为了简化这个流程,我们引入了一种更智能、更方便的方法来加载流行库。 只需使用 %use 魔法命令,并在后面添加一个或多个库的名称即可。

%use 语句执行时,它不仅会下载库依赖项,还会向 Notebook 添加默认导入。 此外,它还将为库的类型注册呈现器,并包括下一节讨论的其他功能。

库集成

Kotlin Notebook 提供了大量库集成选项。

对于用户来说,利用它们就像添加一行代码一样简单:

%use libraryName

对于库作者来说,这个命令可以作为跳板,使其能够:

  • 从任何 Maven 仓库下载库二进制文件。
  • 包含初始导入。
  • 在初始化期间执行代码。
  • 在每个单元执行之前和之后运行代码。
  • 预处理每个单元的代码。
  • 创建某些类型的变量时调用回调。
  • 为库中定义的各种类型制作自定义呈现器。
  • 还有更多。

总的来说,这为创建交互式用户体验提供了几乎无限的可能。 考虑到 Kotlin 的静态和 AOT 类型,自动、动态代码生成提供了更高级别的灵活性和可扩展性。

可以在这里访问综合文档。 我们鼓励所有库作者在公共注册表中共享集成,让所有 Kotlin Notebook 用户都可以使用。 我们很高兴看到一些库(WebTau Roboquant Kaliningraph 等)已经从这种方法中受益。

共享

与团队内外的人员共享 Notebook 是很常见的做法。 Kotlin Notebook 遵循通用 Jupyter 格式,因此可以使用任何 Notebook Web 查看器轻松分发。 值得注意的是,GitHub 具有原生呈现它们的能力。

此外,JetBrains 还拥有 Datalore 平台,无缝支持 Kotlin Notebook。 Datalore 不仅提供共享功能,它还让您能够执行和编辑 Notebook,包含交互式报告等高级功能,以及安排 Notebook 运行的选项,提升便利性和灵活性。

结语

Kotlin Notebook 插件的第一个实验版本已经可以在 IntelliJ IDEA Ultimate 的项目中供您试用!

这是一个示例 Notebook,您可以下载并亲自学习 Kotlin Notebook 的基础知识:

如果您是库作者,请考虑添加与 Kotlin Notebook 的集成

如果您遇到问题或 bug,请在项目的问题跟踪器中提交工单,告知我们。 我们也很期待在 Kotlin Slack 的 #notebook 频道听到您的反馈。

祝您享受 Kotlin Notebook!

本博文英文原作者:

image description

Discover more