JavaFX是什么?

来源:互联网 发布:软件结构图怎么画 编辑:程序博客网 时间:2024/05/16 17:59

JavaFX是什么?

“JavaFX脚本是一种声明式、静态类型编程语言。它具有一等函数(first-class functions)、声明式的语法、列表推导(list-comprehensions)及基于依赖关系的增量式求值(incremental dependency-based evaluation)等特征。”JavaFX脚本为多种多样的操作提供了声明式、无中间程序逻辑的语法,这些操作包括创建2D动画、设置属性或者声明在模式和视图对象之间的绑定依赖关系。

什么样的函数能够称为“first-class functions”?

在编程语言中,我们常常把那些将函数作为一等对象的函数称为一等函数(first-class functions)。具体地说,就是编程语言支持在程序执行过程中构造新的函数,并将它们存储在数据结构中作为其它函数的参数的传入参数,并在函数返回时将它们作为函数值返回。本概念并不涵盖任何语言和程序的外部函数或者程序,例如通过调用编译器或者一个eval函数来创建新函数。
这里提供一等函数的一个简单示例:map或者mapcar函数,它使用一个函数和一个列表作为参数,然后将通过将函数应用到列表中的每个成员后形成的列表作为返回值。

“declarative syntax”是什么意思? 

与大多数依靠程序和显式代码来更新在变量或者属性之间关系的编程语言不同,声明式语言允许数值被声明为另一种方式。
在JavaFX的一个示例:

var a : Number = bind model.attrib/2;


无论何时model.attrib的数值发生改变,a的数值都将自动、透明地更新,更新期间无需调用任何程序。这对于在模式和视图对象之间绑定依赖关系、控制GUI行为是特别有用的。

“list-comprehensions”是什么意思? 

我们常常把“list-comprehensions”翻译为“列表推导”。列表推导是在语言级别上支持以多种方式创建、维护列表的方法。
在JavaFX中的一些示例:

var nums = [1,2,3,4]; var nums2 = [1..4]; //same as above var numsGreaterThanTwo = nums[. > 2]; var numsLessThanFour = select n from n in nums where n < 4; 



什么是"incremental dependency-based evaluation"? 

“incremental dependency-based evaluation”译为“基于依赖关系的增量式求值”。在JavaFX中,属性值能够被声明为依赖于(绑定到)包含其它属性的表达式。这样,当某个被引用的属性数值发生变化时,所有依赖此属性的属性都将直接或者间接地改变它们的数值,此过程无需调用任何的中间程序逻辑。这和在Excel之类的电子表格中使用方程式很类似。
这对于那些需要动态维护模式和视图属性,而又时常需要复杂的程序逻辑的GUI开发来说非常有用。

“操作(operation)” vs “函数(function)”

函数与操作之间的不同之处是函数可以递增地反复求值、可以绑定返回值、绑定参数、绑定变量/属性,隐性绑定本地变量。
为了进一步说明,请看下面的JavaFX代码片段:

Class Foo (   attribute zap;   function bar(x) { x + zap }}var afoo = Foo { zap: 14 }var zing = 1;var snap = afoo.bar(zing);bind dyn = afoo.bar(zing);


我们非常清楚地看到:无论zing和zap如何变化,snap将不会发生变化。而dyn则会随着zing和zap的变化而改变。因为在zing和zap的数值发生变化时,发生了一个增量式的求值过程:程序将变化的数值传递给依赖其的所有函数,并重新计算数值。

JavaFX的授权模式是怎么的?

JavaFX的开发者很赞同让用户发布自己的应用,并坚信开源和社区的力量。但当前的JavaFX版本是在评估授权下发布的,因此并不能够被重新发布。你当然能够发布自己编写的基于JavaFX的应用,但不能够和JavaFX一起捆绑发布,并需要告之使用者:需要到openjfx项目站点下载JavaFX二进制代码库。并且,由于正处于早期的JavaFX代码还处在评估授权下,因此它不能用于商业用途。当Sun完成了JavaFX的商业化版本开发后,我相信这将会得到改变。

Sun是否规定了发布JavaFX商业化产品的时间线?

很抱歉,目前没有准确的时间约定,不过马上就会制定出来。

JavaFX Runtime像JavaFX Script那样开源吗?

是的,JavaFX Runtime即将开放源代码。

在JavaFX和…之间的不同

与F3比较:
F3是Form Follows Function的缩写,这是JavaFX平台从前的名字。

与Java比较:JavaFX 是一种兼容JSR-223的脚本语言。它能够使用Java类,并从Java类中被调用。

与Java 6.0提供的Scriting Engine比较:Java 6.0提供的Scriting Engine为兼容JSR-223的脚本语言提供了运行平台,JavaFX可以在Java 6.0提供的Scriting Engine上执行。而JavaFX并不依赖于Java 6.0,它可以在任何兼容JSR-223的脚本引擎(比如javax.script.ScriptEngine)下执行。

与SVG比较:SVG并不是一种程序语言;它是一种数据描述语言。其XML语法对于编程语言来讲是非常可怕的。但SVG的交互性、兼容性是令人满意的。目前JavaFX开发团队并没有计划直接使用SVG。由于SVG和JavaFX都源自旧的PostScript和Java2D向量图形模式,因此在某种程度上,我们已经在JavaFX中使用了SVG,但目前仍然存在某些值得注意的不兼容性。
Chris Oliver 已经编写了SVG-to-F3 转换程序。

与Swing比较:JavaFX是一种编写Swing应用的新方式,它无需了解swing框架和java语言。

与JavaScript比较:在JavaFX和JavaScript之间唯一相同点就是它们都是兼容JSR-223的脚本语言。

与Ajax比较:Ajax是使用了JavaScript和异步更新的web浏览器端技术。它与JavaFX的关系:两者都是UI相关的技术。但它们在语言和环境上完全不同。

与Savaje OS的关系:Sun正在计划使用它们购买的Saveje手机系统和JVM来发布JavaFX Mobile,后者能在移动设备上运行JavaFX脚本,它将成为Windows Mobile、Flash Lite的有力竞争者。

我能够使用JavaFX编写Java3D应用吗?它兼容VRML或者X3D标准、Xj3D之类的代码库吗? 

没有原因不能使用。JavaFX能够和任何第三方代码库互操作,并且不需要任何特殊语法。目前JavaFX开发团队正在进行开发支持Java3D的功能。

JavaFX是一种RCP(Rich Client Platform) 吗? 

是的。JavaFX不仅能够用于RCP开发,也能够用于RIA(Rich internet Applications)开发。

我能够在web应用中使用JavaFX吗? 

JavaFX能够用于编写前端应用、web应用的视图或者用户接口,不过这都需要JVM的支持。

JavaFX将代替Java EE中的JSF和JSP吗? 

不,JSF和JSP用于编写纯粹的web应用(对于支持HTML的HTTP客户端来讲是可用的),而JavaFX需要位于客户端的JVM。如果你希望编写富客户端的话,那么就需要在客户端安装JRE,JavaFX能够提供与基于Flash的Flex、基于.net的Silverlight相同的功能。常见的应用场景是开发运行在公司内网的应用。

JavaFX在运行时需要服务器吗? 

JavaFX是一种关注GUI的脚本语言;它主要用于桌面应用,因此不需服务器。如果你计划部署JNLP(Java Web Start)的话,那么你需要一台web服务器。

原创粉丝点击