我正在尝试使用JavaFX和Scala使用一些思维导图功能来实现一个简单的便笺组织器。
我试图决定是否应该直接从Scala或通过ScalaFX调用JavaFX代码?我不知道学习ScalaFX是否值得,从Scala代码直接调用JavaFX是否会更简单?
official ScalaFX site提到了ScalaFX的4个好处:
1)自然语言绑定(bind)表达式
-很好,但是我实际上并没有计划使用太多的绑定(bind)(我打算将EventBus用于GUI组件之间的事件,而将某些绑定(bind)用于GUI组件内部的事件)。
2)量身定制的动画语法
-我不打算在我的项目中使用动画。
3)完整类型安全的API
-这似乎很有趣! 但我的问题是:我怀疑直接调用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所希望的。)
现在,如何以及何时使用它本身是一个辩论,但这就是 essentailly它提供的所有。
就我个人而言,我总是喜欢一个API,该API可让我与同龄人和我的 future 自我更清晰地传达我的意图,但这是每个团队和项目都必须自行决定的事情。
ScalaFX的绑定(bind)语法非常出色,因为“属性”和“绑定(bind)”正逐渐进入越来越多的后端(甚至没有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/