{{{ #!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 }}}