- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 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/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!