JavaFX 是一種宣告式、靜態型別的腳本程式語言,專為建構豐富互動應用程式 (RIA) 而設計。它具備一等函數、宣告式語法、列表推導以及基於依賴關係的增量式求值等核心特性。JavaFX 腳本為創建 2D 動畫、屬性設定、以及在模型與視圖物件之間建立綁定依賴關係提供了無中間程序邏輯的宣告式語法,極大地簡化了 GUI 開發的複雜度。
在程式語言中,若函數可被視為一等物件——即能在執行期動態建構、儲存於資料結構、作為參數傳遞、作為回傳值——則稱為一等函數。JavaFX 支援此特性,例如 map 或 mapcar 函數可接受一個函數與一個列表,將函數應用於列表每個元素並回傳新列表。
不同於傳統命令式語言需透過顯式程式碼更新變數關係,宣告式語言允許直接宣告數值間的關係。例如:
var a : Number = bind model.attrib / 2;
當 model.attrib 變化時,a 會自動、透明地更新,無需呼叫任何程序。這對模型-視圖綁定與 GUI 行為控制極為有用。
列表推導提供語言層面的支援,以多種方式建立、維護列表。JavaFX 範例:
var nums = [1,2,3,4];
var nums2 = [1..4]; // 等同於上述
var numsGreaterThanTwo = nums[. > 2];
var numsLessThanFour = select n from n in nums where n < 4;
屬性值可宣告為依賴(綁定)於包含其他屬性的運算式。當被引用屬性變化時,所有依賴該屬性的屬性會直接或間接自動更新,無需中間程序邏輯,類似電子表格的運作方式。此機制對動態維護模型與視圖屬性的 GUI 開發極具價值。
函數可遞增地重複求值、可綁定回傳值、參數、變數/屬性,並隱性綁定區域變數;操作則不具備這些綁定能力。以下程式碼示範差異:
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); // 動態綁定
snap 不會隨 zing 或 zap 變化而改變,但 dyn 會因增量式求值機制自動更新。
目前版本採評估授權釋出,不可重新分發。開發者可發布基於 JavaFX 的應用,但不可與 JavaFX 執行環境捆綁,需引導使用者至 OpenJFX 專案下載二進制庫。早期版本不得用於商業用途,正式商業版釋出後將改變此限制。
尚無確切時間表,但即將制定。
JavaFX Runtime 即將開放原始碼。
執行條件(二擇一):
編譯器: OpenJFX Compiler 專案已開源。