JavaFX教程-增量式求值和懶惰求值
在JavaFX中,屬性初始化程式能夠使用bind操作符進行懶惰、增量式求值。使用bind初始化的屬性類似於包含公式的電子表格中的單元格。在包含此屬性的物件的生命週期中,只要在初始化表示式右側引用的任何物件發生改變,其左側的物件屬性將被自動更新。示例如下:
import java.lang.System;
class X {
attribute a: Number;
attribute b: Number;
attribute c: Number;
}
trigger on X.b = newValue {
System.out.println("X.b is now {newValue}");
}
trigger on X.c = newValue {
System.out.println("X.c is now {newValue}");
}
var x1 = X {
a: 1
b: 2 // X.b is now 2 is printed
c: 3 // X.c is now 3 is printed
};
var x2 = X {
a: x1.a // eager, non-incremental
b: bind x1.b // eager, incremental (X.b is now 2 is printed)
c: bind lazy x1.c // lazy, incremental (nothing is printed yet)
};
System.out.println(x2.a); // prints 1
System.out.println(x2.b); // prints 2
System.out.println(x2.c); // prints X.c is now 3, then prints 3
x1.a = 5;
x1.b = 5; // prints X.b is now 5, twice
x1.c = 5; // prints X.c is now 5, twice
System.out.println(x2.a); // prints 1
System.out.println(x2.b); // prints 5
System.out.println(x2.c); // prints 5
上例中,x2的屬性b和c被繫結到x1的屬性b和c。這意味著當x1的b或c屬性被更新時,x2的b或c屬性都會相應地被更新。在x2中的b、c屬性之間的不同是:前者的屬性值在其屬性初始化程式中被立即更新,而後者的繫結直到其值被訪問時才被求值。
注意:函式體無需bind操作符便可被增量地求值,但操作體則做不到。在改變本地變數的操作中並不觸發增量式求值。增量式求值不能在操作體內執行,除了表示式明確地以bind作為字首。
然而,當你在一個增量式求值上下文中呼叫操作或者Java方法,此呼叫本身將被增量式求值。這意味著如果此呼叫變成了對操作或者Java方法的全新呼叫(由於此呼叫被增量式求值),那麼它所用到的任何引數值將被使用並返回新值。
譯者注:此處的新值是與不進行增量式求值相比。
相反,在增量式求值上下文中呼叫函式,此函式只能被呼叫一次,而其求值結果也將被合併到呼叫求值樹中。
增量式求值是JavaFX的主要特徵,它使定義複雜的動態GUI宣告成為了可能。懶惰求值的特性常用在處理像tree或者graph這樣的遞迴資料結構上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-209698/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 3.2.5 表示式求值
- Java表示式求值引擎 - AviatorJava
- Javascript函式引數求值——Thunk函式JavaScript函式
- CF552E 字串 表示式求值字串
- 逆波蘭表示式求值 golang VS pythonGolangPython
- 棧在表示式求值中的應用
- 逆波蘭表示式求值——棧與佇列佇列
- JS中的求值策略JS
- Javascript中的求值策略JavaScript
- JavaScript 中的求值策略JavaScript
- 字尾表示式的求值的演算法演算法
- 力扣-150. 逆波蘭表示式求值力扣
- LeetCode-150- 逆波蘭表示式求值LeetCode
- 利用 Lambda 表示式實現 Java 中的惰性求值Java
- 利用Lambda表示式進行Java中的惰性求值Java
- 一種簡易的表示式求值演算法演算法
- Leetcode——150. 逆波蘭表示式求值LeetCode
- JavaFX教程-字串和字串表示式Java字串
- 第九章:type、newtype和惰性求值
- 函式正規化入門(惰性求值與函式式狀態)函式
- 4、逆波蘭表示式求值——棧(java資料結構)Java資料結構
- 算數表示式求值--c語言課程設計C語言
- 使用棧實現表示式求值,運用棧計算
- POJ-3337 Expression Evaluator-表示式求值Express
- 惰性求值——lodash原始碼解讀原始碼
- 團隊使人懶惰
- JavaFX教程-表示式Java
- JavaFX教程-函式、陣列、表示式和操作Java函式陣列
- PostgreSQL 原始碼解讀(164)- 查詢#84(表示式求值)SQL原始碼
- 【演算法】E.W.Dijkstra算術表示式求值演算法
- Jmeter配置元件-http預設請求值JMeter元件HTTP
- 史丹佛大學:2017年全球懶惰國家地圖 印尼居民最為懶惰地圖
- JavaFX教程-範圍表示式Java
- 【資料結構】棧的應用——中綴表示式求值(c++)資料結構C++
- 資料結構學習(C++)——棧應用(表示式求值) (轉)資料結構C++
- 高效的程式設計師是聰明和懶惰的程式設計師
- 資訊學奧賽複賽複習09-CSP-J2020-03表示式求值前置知識點-中綴表示式求值、摸運算、模運算性質、棧
- 演算法筆記02--歸納法之多項式求值(Horner規則)演算法筆記