Java 除了为绑定添加语法糖之外,ScalaFX还有什么好处?

Java 除了为绑定添加语法糖之外,ScalaFX还有什么好处?,java,scala,javafx,scalafx,Java,Scala,Javafx,Scalafx,我正在尝试使用JavaFX和Scala实现一个简单的便笺管理器,其中包含一些思维导图功能 我正在尝试决定是直接从Scala调用JavaFX代码还是通过ScalaFX调用JavaFX代码?我不知道学习ScalaFX是否值得,从Scala代码直接调用JavaFX是否更简单 其中提到了ScalaFX的4个好处: 1) 自然语言绑定表达式 -这很好,但我并不打算使用那么多绑定(我打算对gui组件间事件使用EventBus,对gui组件内事件使用一些绑定) 2) 定制动画语法 -我不打算在我的项目中使用动

我正在尝试使用JavaFX和Scala实现一个简单的便笺管理器,其中包含一些思维导图功能

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

其中提到了ScalaFX的4个好处:

1) 自然语言绑定表达式

-这很好,但我并不打算使用那么多绑定(我打算对gui组件间事件使用EventBus,对gui组件内事件使用一些绑定)

2) 定制动画语法

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

3) 全类型安全API

这似乎是一个无关紧要的问题…类型安全是一个问题 Java开发人员一直拥有的(并且通常认为是理所当然的),以及 其他脚本语言的开发人员生活在没有(而且是不知不觉)的环境中 因此会出现运行时错误)。然而,这是一个关键问题 如果您正在开发的应用程序不能有意外的 部署后的运行时错误和bug

一个好的编译器将能够发现许多常见的编码错误 通过比较预期类型和实际类型,以及一个优秀的编译器 (如Scala)将自动为您推断类型,因此您没有 在整个代码中重复它们

ScalaFX通过类似于脚本的DSL语法实现了两全其美 在这种情况下,您很少需要显式地键入对象,而 将推断和检查类型的Scala编译器的类型安全性 每一个表达式和API调用。这意味着调试花费的时间更少 奇怪的代码错误和拼写错误,以及高质量的代码 大门

-这似乎很有趣但我的问题是:我怀疑直接调用JavaFX Scala为我提供了与通过ScalaFX调用JavaFX相同的类型安全保证,是否?我不知道

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

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

总之:

看来,第三点是唯一一个可能给我带来一些好处的 在我的简单项目中我很关心,但我不知道他们真正谈论的是什么类型的安全

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

因此,换句话说,我知道ScalaFX是绑定的一种很好的语法糖,但它是否提供了更多的功能?我真的应该使用它,如果我可以生活在没有(非常好的)syntac糖它给

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


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

ScalaFX是一种使用JavaFX的DSL。提供,你所谓的“语法糖”是DSL的主要目的

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

现在,如何以及何时有用,这本身就是一场辩论,但这本质上就是它所提供的一切。 就我个人而言,我总是希望API能让我更清楚地向同事和未来的自己传达我的意图,但这是每个团队和项目都必须自己决定的事情。 ScalaFX的绑定语法很棒,因为属性和绑定正在越来越多的后端(即使没有JavaFXGUI)

我认为,ScalaFX之所以具有广告类型安全性,并不是因为它是ScalaFX本身的一个特殊功能,而是因为值得注意的是,使用像ScalaFX这样一致、类似脚本的语言,并利用Scala平台的强大功能,仍然可以提供类型安全性(对于新手和不熟悉Scala的人来说,这可能是违反直觉的)

我建议在您的情况下使用ScalaFX,因为听起来您正在从事一个小项目 ,主要关注通过JavaFXGUI提供的用户体验(我假设您已经给出了描述)。ScalaFX将允许您在GUI上快速迭代

不要在一开始就担心开销,您的用例很难成为性能要求很高的应用程序。如果您确实需要担心性能,为什么要使用Scala;)


ScalaFX最大的缺点是每个JavaFX类型都需要用一个
包装
,如果您需要的某个类型没有包装,或者将来有东西添加到JavaFX中,您需要等待ScalaFX包装后才能使用它,这将是一件麻烦的事情(这两个都不是真正的拦截器,尽管首先,包装JavaFX类型()很简单,其次JavaFX的发布周期比ScalaFX慢得多。

从纯实用的角度讲,它更简洁易读

通过比较Java和Scla中的代码,我建议您自己看看这一点

  • 代码摘录自ProJavaFX一书,该书在上的本机Java和scalaFX中均有提供(该页面上有指向JavaFX代码的链接)

  • 此外,您还可以将的代码与tha进行比较