java - 除了为绑定(bind)添加语法糖之外,ScalaFX 还有哪些好处?

标签 java scala javafx scalafx

我正在尝试使用 JavaFX 和 Scala 实现一个简单的笔记管理器,它具有一些思维导图功能。

我想决定是直接从 Scala 还是通过 ScalaFX 调用 JavaFX 代码?我不知道是否值得学习ScalaFX,直接从Scala代码调用JavaFX不是更简单吗?

official ScalaFX site提到了 ScalaFX 的 4 个好处:

1) 自然语言绑定(bind)表达式

-这很好,但我真的不打算使用那么多的绑定(bind)(我打算将 EventBus 用于 inter-gui-component 事件和一些用于 intra-gui-component 事件的绑定(bind))。

2) 定制动画语法

-我不打算在我的项目中使用动画。

3) 完全类型安全的 API

This may seem like an insignificant point… Type safety is something that Java developers have always had (and often take for granted), and developers in other scripting languages live without (and unknowingly suffer with runtime errors as a result). However, it is a critical feature if you are developing applications that cannot have unexpected runtime errors and bugs after deployment.

A good compiler will be able to pick up many common coding mistakes through comparison of expected and actual types, and a great compiler (like Scala) will automatically infer types for you so you don’t have to tediouisly repeat them throughout your code.

ScalaFX gets the best of both worlds with a scripting-like DSL syntax where you can rarely have to explicitly type objects, with the strong type-safety of the Scala compiler that will infer and check the types of every expression and API call. This means less time spent debugging weird code bugs and misspellings, and higher quality code right out of the gate!

-这看起来很有趣! 但我的问题是:我怀疑直接调用JavaFX 来自 Scala 的代码为我提供了与通过 ScalaFX 调用 JavaFX 相同的类型安全保证,还是不是? 我不知道。

4) 无缝的 JavaFX/ScalaFX 互操作性:

-如果我直接从 Scala 调用 JavaFX,那么我不必比通过 ScalaFX 调用 JavaFX 时更担心互操作性问题。

总结:

似乎只有第 3 点可能会给我一些好处 我在我的简单项目中关心的是什么,但我只是不知道他们真正在谈论什么样的类型安全?

为什么在类型安全方面通过 ScalaFX 调用 JavaFX 比直接从 Scala 调用更好? 如果我们使用 ScalaFX 而不是直接从 Scala 访问,我们会获得什么样的额外类型安全优势?我问这个是因为我真的无法想象 ScalaFX 可以提供什么样的附加类型安全

所以,换句话说,我知道 ScalaFX 是一种很好的绑定(bind)语法糖,但它提供的不止于此吗?如果我可以在没有它提供的(非常好的)语法糖的情况下生活,我真的应该使用它吗?

除了糖之外还有什么东西值得使用这个包装层 (ScalaFX),它引入了额外的复杂性(和错误的来源)?

请注意,我非常感谢 ScalaFX 创作者的工作!我问这些问题只是为了能够做出更明智的决定。

最佳答案

ScalaFX 是用于处理 JavaFX 的DSL。提供,您所谓的“语法糖”是 DSL 的主要目的

(DSL 传统上也将宿主语言的范围限制在目标域,但这通常不是 Scala DSL 所希望的。)

现在,如何以及何时有用,这本身就是一个争论,但这就是它所提供的本质上。 就个人而言,我总是更喜欢一个 API,它可以让我更清楚地向我的同事我 future 的自己传达我的意图,但这是每个团队和项目都必须自己决定。 ScalaFX 的绑定(bind)语法很棒,因为 Properties 和 Bindings 正在寻找进入越来越多后端的途径(即使没有 JavaFX GUI)。

ScalaFX 宣传类型安全的原因,我认为,不是因为它是 ScalaFX 本身的一个特殊功能,而是因为值得注意的是使用这样一种简洁的、类似脚本的语言例如 ScalaFX 并利用 Scala 平台的强大功能,仍会为您提供类型安全(对于新手和不熟悉 Scala 的人来说这可能是违反直觉的)。

我会推荐使用 ScalaFX 在你的情况下,因为听起来你正在做一个项目 ,主要侧重于通过 JavaFx GUI 提供的用户体验(根据您的描述,我假设)。 ScalaFX 将允许您在 GUI 上快速迭代

一开始不要担心开销,您的用例几乎不会是对性能要求很高的应用。如果您确实需要担心性能,为什么要使用 Scala ;)?

ScalaFX 最大的缺点是每个 JavaFX 类型都需要用 SFXDelegate 进行包装 ,如果您需要的某些类型没有被包装,或者将来某些东西被添加到 JavaFX 并且您需要等待 ScalaFX 包装它才能使用它,这会很麻烦(尽管首先,这两者都不是真正的阻碍,但它是包装 JavaFX 类型 ( see the ScalaFX Wiki ) 很简单,其次,JavaFX 的发布周期比 ScalaFX 慢很多

关于java - 除了为绑定(bind)添加语法糖之外,ScalaFX 还有哪些好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22737934/

相关文章:

scala - 协方差和方法参数

java - 为什么我在尝试运行 JavaFx 应用程序时出现 java.lang.ClassNotFoundException?

java - 在javafx中定义<Image/>标签

java - Struts2 REST 插件 : Sending JSON object through PUT

Java:StringBuffer 和串联

scala - Spark dataframe写方法写很多小文件

scala - 如何设计 Spark 应用,让 Shuffle 数据在一些迭代后自动清理

java - 在 Javafx 中添加图像的最简单方法?

java - 我应该尽量避免使用静态同步方法吗

java - 异常映射 - org.jboss.resteasy.spi.UnhandledException : exception. DenemeException: off bu exler