Fast EL表達(dá)式計算引擎
fast-el 是輕量級的高效的表達(dá)式計算引擎,源自于企業(yè)項目,設(shè)計目標(biāo)是為了滿足不斷變化的功能需求和性能需求。
Fel 是開放的,引擎執(zhí)行中的多個模塊都可以擴(kuò)展或替換。Fel 的執(zhí)行主要是通過函數(shù)實現(xiàn),運算符(+、-等都是Fel函數(shù)),所有這些函數(shù)都是可以替換的,擴(kuò)展函數(shù)也非常簡單。
Fel 有雙引擎,同時支持解釋執(zhí)行和編譯執(zhí)行??梢愿鶕?jù)性能要求選擇執(zhí)行方式。編譯執(zhí)行就是將表達(dá)式編譯成字節(jié)碼(生成java代碼和編譯模塊都是可以擴(kuò)展和替換的)
Fel基于 Java 1.5 開發(fā),適用于 Java 1.5 及以上版本。
具體的測試數(shù)據(jù)請參見 http://code.google.com/p/fast-el/wiki/Performance
特點:
易用性:API使用簡單,語法簡潔,和java語法很相似。
輕量級:整個包只有300多KB。
高 效:目前沒有發(fā)現(xiàn)有開源的表達(dá)式引擎比Fel快。
擴(kuò)展性:采用模塊化設(shè)計,可靈活控制表達(dá)式的執(zhí)行過程。
根函數(shù):Fel支持根函數(shù),“count(1,2,3)”在Fel中是常用的使用函數(shù)的方式。
不足:
支持腳本:否。
支持?jǐn)?shù)組:否。Fel不支持類似于arrayi?這樣的語法,可以通過其他方法獲取數(shù)據(jù)值。后續(xù)版本可以改進(jìn)。
支持三元表達(dá)式:否。后續(xù)版本可以改進(jìn)。
適應(yīng)場景:
Fel適合處理海量數(shù)據(jù),F(xiàn)el良好的擴(kuò)展性可以更好的幫助用戶處理數(shù)據(jù)。
Fel同樣適用于其他需要使用表達(dá)式引擎的地方(如果工作流、公式計算、數(shù)據(jù)有效性校驗等等)
Fel使用例子:
執(zhí)行四則表達(dá)式,代碼如下所示:
1:常量表達(dá)式:
FelEngine fel = new FelEngineImpl();
Object result = fel.eval("5000*12+7500");
System.out.println(result);
輸出結(jié)果:67500
2:變量
使用變量,其代碼如下所示:
FelContext ctx = fel.getContext();
ctx.set("單價", 5000);
ctx.set("數(shù)量", 12);
ctx.set("運費", 7500);
Object result = fel.eval("單價*數(shù)量+運費");
System.out.println(result);
輸出結(jié)果:67500
