Clojure

在 REPL 中编程:REPL 辅助开发指南

Clojure REPL 用于广泛的目的,从学习语言到数据探索到现场音乐表演。本章将提供一些指导原则,用于将 Clojure REPL 应用于更常见的实用软件开发用例。

REPL 是您程序的用户界面

程序通常通过各种媒介提供用户界面

  • 图形化:网页、移动和桌面应用程序

  • 基于网络:Web 服务/HTTP API/…​

  • 基于存储:程序使数据库保持最新状态,然后可以查询该数据库

  • 命令行界面 (CLI):通过终端进行交互

您应该将 REPL 视为用户与程序交互的另一种媒介;与上面列出的那些相比,它需要高级知识(用 Clojure 编程!),但它也极具表现力且开发成本低廉,因为它几乎不需要预料用户想要利用代码的哪些部分。例如,REPL 非常适合临时数据导出。

在 Clojure 项目中,通常的做法是定义仅用于 REPL 交互的函数和命名空间:将其视为 CLI、仪表板等的替代方案。

不要被 REPL 冲昏头脑

REPL 可以为您带来很多速度,但不要将运动误认为进步。您应该始终带着计划使用 REPL,否则 REPL 会给您带来更多干扰而不是专注。如果您发现很难在使用 REPL 时将计划保存在脑海中,考虑将其写下来

REPL 只能引导您进行非常渐进的更改,这很容易让您陷入“局部最大值”。当需要更具战略意义的思考时,强迫自己退一步。特别是,快速反馈不能替代软件设计和有条理的解决问题。

不要忘记保存您的工作,并使其可访问

REPL 是一种非常短暂且排他的媒介。如果 REPL 会话有任何需要带走的东西,它可能应该驻留在您有缺陷的人类记忆之外的其他地方(例如代码、测试、注释掉的代码、文档、数据文件等)。

如果您在 REPL 中学到的内容是您项目的先决条件,则您应该做一些额外的工作,使其对其他贡献者(包括几个月后的您自己)可访问。

REPL 不是交互式开发的唯一工具

还有其他工具可以在编程时提供紧密的反馈循环

  • 自动重新加载测试套件(例如:Midje

  • 静态代码分析工具(代码风格检查器、静态类型检查器)

  • 热代码重新加载(例如:Figwheel

  • “可视化”测试套件(例如:Devcards

没有理由将这些方法视为与 REPL 辅助开发“竞争”,而且 REPL 通常可以帮助您使用它们。每种方法都有其优缺点:例如,REPL 使程序的执行变得非常具体,但它是检测故障的糟糕工具。