【jxh118】JavaFX知多少
常见问题ITPUB个人空间 B'Q{1i"na%WS
3r6I7r F%h"i&y0JavaFX是什么?
/m~g~o,^ r` e9s0
0|[b6h5]0^H0“JavaFX 脚本是一种声明式、静态类型编程语言。它具有一等函数(first-class functions)、声明式的语法、列表推导(list-comprehensions)及基于依赖关系的增量式求值(incremental dependency-based evaluation)等特征。”JavaFX脚本为多种多样的操作提供了声明式、无中间程序逻辑的语法,这些操作包括创建2D动画、设置属性或者声明在模式和视图对象之间的绑定依赖关系。ITPUB个人空间'|[aO2bG/U:X"E
ITPUB个人空间:l%^1Y@ Vh!F
什么样的函数能够称为“first-class functions”?
eS3fX o3n7B*z0
H8Q~v-s6@0在编程语言中,我们常常把那些将函数作为一等对象的函数称为一等函数(first-class functions)。具体地说,就是编程语言支持在程序执行过程中构造新的函数,并将它们存储在数据结构中作为其它函数的参数的传入参数,并在函数返回时将它们作为函数值返回。本概念并不涵盖任何语言和程序的外部函数或者程序,例如通过调用编译器或者一个eval函数来创建新函数。
d+J&T,Dk.n0这里提供一等函数的一个简单示例:map或者mapcar函数,它使用一个函数和一个列表作为参数,然后将通过将函数应用到列表中的每个成员后形成的列表作为返回值。
S$lS&M4b9tpR0ITPUB个人空间0sV,Y-bC J-_Wh
“declarative syntax”是什么意思?
YH1Yo4`C3`G0ITPUB个人空间QI/c7Z8R}3jjm
与大多数依靠程序和显式代码来更新在变量或者属性之间关系的编程语言不同,声明式语言允许数值被声明为另一种方式。ITPUB个人空间~1Ve2r[a!Lb#^
在JavaFX的一个示例:
x2OFM&v0var a : Number = bind model.attrib/2;
;v9K Th$t*Vs0无论何时model.attrib的数值发生改变,a的数值都将自动、透明地更新,更新期间无需调用任何程序。这对于在模式和视图对象之间绑定依赖关系、控制GUI行为是特别有用的。
,VC!x;j
r0u$JZ0ITPUB个人空间sR+v7hd5hFH
“list-comprehensions”是什么意思?ITPUB个人空间j7guBTo
ITPUB个人空间|+{
Wc`yHk;L7B)K
我们常常把“list-comprehensions”翻译为“列表推导”。列表推导是在语言级别上支持以多种方式创建、维护列表的方法。ITPUB个人空间/q5Y,a0{
?Q^0J
在JavaFX中的一些示例:ITPUB个人空间 T;r
M)f-XU C
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;ITPUB个人空间/R*vdC eSJI~q/?
@zxoHS2M%n5l0什么是"incremental dependency-based evaluation"?ITPUB个人空间D)kEFH5t
U&{.Mh[ pc,b0“incremental dependency-based evaluation”译为“基于依赖关系的增量式求值”。在JavaFX中,属性值能够被声明为依赖于(绑定到)包含其它属性的表达式。这样,当某个被引用的属性数值发生变化时,所有依赖此属性的属性都将直接或者间接地改变它们的数值,此过程无需调用任何的中间程序逻辑。这和在Excel之类的电子表格中使用方程式很类似。
5m*Le z6F|0这对于那些需要动态维护模式和视图属性,而又时常需要复杂的程序逻辑的GUI开发来说非常有用。
6ox\0dT.`nk1]0