5

我想要一个用于 clojure/seesaw 应用程序的简单时间线组件(如在视频编辑软件中),我想知道直接用 clojure 和 seesaw 实现它是否是一种好方法,或者我是否应该用 java 编写它并制作我的 clojure 包装器周围。

或更笼统地说:函数式编程语言是否最适合编写 UI 小部件?我无法想象在没有涉及很多状态的情况下这样做。OO 最初不是为 UI 开发而发明的吗?

4

3 回答 3

4

你可以去任何一种方式。在 Overtone 上,我们使用 Seesaw直接在 Clojure中构建了许多自定义图形组件。很多时候,一个原子(seesaw.core/canvas)就足够了。

根据您的喜好,在 Clojure 中执行此操作的一个原因是您可以将 Seesaw 的协议(选择、绑定等)扩展到新的小部件,以便它与 Seesaw 无缝协作。另一个考虑因素是您的小部件是否需要使用来自应用程序其他部分的 Clojure 数据。这从 Clojure 将比 Java 更干净。

也就是说,如果您对 Swing/Java 感到满意,您可以在那里进行操作,并且 Seesaw 将非常乐意使用 Java 构建的自定义小部件。祝你好运!

于 2012-03-23T14:36:08.277 回答
2

FP 非常适合进行 UI 编程,但底层 UI 框架也应该基于 FRP 等 FP 概念。在您的情况下,底层 UI 框架(Swing)是基于 OO 的,因此在 Java 中实现它会更容易但你仍然可以在跷跷板上做。

于 2012-03-23T11:53:45.367 回答
2

在其他条件相同的情况下(即假设您同时了解 Clojure 和 Java),我可能会将其编写为 Java 中的自定义 Swing 组件。

原因:

  • Swing 本质上是一个基于 Java 的 OOP 框架,在范式方面更适合 Java
  • 可变状态在 Java 中比在 Clojure 中更容易
  • 如果您用 Java 编写它,您可以更轻松地在其他地方使用它(例如,作为其他 Java 代码的库)
  • 创建 Swing 组件后,在 Clojure 中包装它很容易

当然,对于应用程序逻辑本身,我当然更喜欢 Clojure。

于 2012-03-23T12:02:22.323 回答