{{{
#!html
}}}
Quick Laconic Express 高效简洁脚本
[[wiki:qlexpress-feature QLExpress的特性]]
[[wiki:qlexpress-typical-demo QLExpress的典型应用场景]]
[[wiki:qlexpress-keyword QLExpress关键字描述和范例]]
[http://code.taobao.org/trac/QLExpress/raw-attachment/wiki/qlexpress-download/QLExpress-2.2.7.zip QLExpress 最新下载 2.2.7 ][[BR]]
[[BR]]
[[wiki:qlexpress-download QLExpress 历史下载]][[BR]]
[[BR]]
[[wiki:qlexpress-buglist Bug清单和修复状态]][[BR]]
[[BR]]
[[wiki:qlexpress-new-list 待增加特性]][[BR]][[BR]]
[http://blog.csdn.net/express_wind/article/details/7468700 QLExpress脚本语言技术讲解]
[[BR]]
[[BR]]
'''使用特别说明【重要】:'''[[BR]]
1、在实际应用中ExpressRunner应该尽量做成单例的[[BR]]
2、在执行语句的时候,要开启缓存语句的开关。因为词法、语法分析在非常耗时的。就像ORACLE要求使用变量绑定一样的道理。[[BR]]
'''这个表达式相对别的计算工具,优点主要体现在:'''[[BR]]
A、不需要预先加载可能需要的所有属性值[[BR]]
B、 用户可以根据业务需要自定义操作符号和函数[[BR]]
C、可以同步输出判断错误信息,有利于提高业务系统在规则判断等使用场景下的用户体验。减少业务系统相关的处理代码。[[BR]]
D、支持for,break、continue、if then else 等标准的程序控制逻辑[[BR]]
E、支持的操作符号:[[BR]]
'''主要用途''':[[BR]]
提供一个简单灵活的业务规则引擎。一些业务规则的组合判断,同时输出相关的错误信息[[BR]]
'''执行处理的流程''':[[BR]]
1、单词分解[[BR]]
2、语法分析[[BR]]
3、生成最后的运行期指令集合[[BR]]
4、执行生成的指令集合[[BR]]
其中:1 到 3 的结果是可以缓存的,可以提高运行期效率[[BR]]
在本地笔记本执行10万次 "10 * 10 + 1 + 2 * 3 + 5 * 2" 耗时: 0.171秒[[BR]]
----
'''最简单Hello范例:''' [[BR]]
{{{
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
}}}