Quick Laconic Express 高效简洁脚本
QLExpress 最新下载 2.2.7
QLExpress 历史下载
Bug清单和修复状态
待增加特性
使用特别说明【重要】:
1、在实际应用中ExpressRunner应该尽量做成单例的
2、在执行语句的时候,要开启缓存语句的开关。因为词法、语法分析在非常耗时的。就像ORACLE要求使用变量绑定一样的道理。
这个表达式相对别的计算工具,优点主要体现在:
A、不需要预先加载可能需要的所有属性值
B、 用户可以根据业务需要自定义操作符号和函数
C、可以同步输出判断错误信息,有利于提高业务系统在规则判断等使用场景下的用户体验。减少业务系统相关的处理代码。
D、支持for,break、continue、if then else 等标准的程序控制逻辑
E、支持的操作符号:
主要用途:
提供一个简单灵活的业务规则引擎。一些业务规则的组合判断,同时输出相关的错误信息
执行处理的流程:
1、单词分解
2、语法分析
3、生成最后的运行期指令集合
4、执行生成的指令集合
其中:1 到 3 的结果是可以缓存的,可以提高运行期效率
在本地笔记本执行10万次 "10 * 10 + 1 + 2 * 3 + 5 * 2" 耗时: 0.171秒
最简单Hello范例:
String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
ExpressRunner runner = new ExpressRunner();
Object result = runner.execute(express, null, false, null);
System.out.println("表达式计算:" + express + " = " + result);
其它范例:
ExpressRunner runner = new ExpressRunner();
runner.addOperator("love", new LoveOperator("love"));
runner.addOperatorWithAlias("属于", "in", "用户$1不在允许的范围");
runner.addOperatorWithAlias("myand", "and", "用户$1不在允许的范围");
runner.addFunction("累加", new GroupOperator("累加"));
runner.addFunction("group", new GroupOperator("group"));
runner.addFunctionOfClassMethod("isVIP", BeanExample.class.getName(),"isVIP", new String[] { "String" }, "$1不是VIP用户");
runner.addFunctionOfClassMethod("取绝对值", Math.class.getName(), "abs",new String[] { "double" }, null);
runner.addFunctionOfClassMethod("转换为大写", BeanExample.class.getName(),"upper", new String[] { "String" }, null);
在这个计算引擎里面, 执行下述表达式结果:
Example 0 : int defVar = 100; defVar = defVar + 100; = 200
Example 1 : 3+ (如果 1==2 则 4 否则 3) +8 = 14
Example 2 : 如果 (如果 1==2 则 false 否则 true) 则 {2+2;} 否则 {20 + 20;} = 4
Example 3 : System.out.println("ss") = null
Example 4 : unionName = new com.ql.util.express.test.BeanExample("张三").unionName("李四") = 张三-李四
Example 5 : group(2,3,4) = 9
Example 6 : 取绝对值(-5.0) = 5.0
Example 7 : max(2,3,4,10) = 10
Example 8 : max(3,2) + 转换为大写("abc") = 3ABC
Example 9 : c = 1000 + 2000 = 3000
Example 10 : b = 累加(1,2,3)+累加(4,5,6) = 21
Example 11 : 三星卖家 and 消保用户 = true
Example 12 : new String("12345").length() = 5
Example 13 : 'a' love 'b' love 'c' love 'd' = d{c{b{a}b}c}d
Example 14 : 10 * (10 + 1) + 2 * (3 + 5) * 2 = 142
Example 15 : ( 2 属于 (4,3,5)) or isVIP("qhlhl2010@gmail.com") or isVIP("qhlhl2010@gmail.com") = false
系统输出的错误提示信息:[用户 2 不在允许的范围, qhlhl2010@gmail.com 不是VIP用户]
Example 16 : 1!=1 and isVIP("qhlhl2010@gmail.com") = false
Example 17 : 1==1 or isVIP("qhlhl2010@gmail.com") = true
Example 18 : abc == 1 = true
Example 19 : testLong(abc) = toString:1
Attachments

Weibo Login
Taobao Login