- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式引擎简介
为什么需要 EL 表达式引擎
你,对,就是你,正在看这篇⽂章的⼈,我虽然不认识你,但是 我可以负责任的说,
如果你看到这个 题就⼼⾥在悄悄的呼喊: “靠,他们连这个都有!我省事了,哇哈
哈哈和” 。 那么,你绝对属于百分之⼀的特例。 就是说,绝⼤多数⼈的绝⼤多数项
⽬,是不需要 ⼀个嵌⼊式的表达式引擎的。因此,提供这个功能的⽬的就是:
满⾜ ⼩撮⼈的 ⼩撮要求
但是,⼀⼩撮⼈的⼀⼩撮要求有很多,作为⼀个⼩众类库,为什么单单打算⽀持
这个特性呢? 下⾯是我的理由:
这个功能是其它模块功能的基础,我们需要它
可能因此吸引其他的开发者对 Nutz 的兴趣
需要嵌⼊式表达式引擎的⼈是 Java 开发者的少数⼈,但是这些⼈也应该
⽐ Nutz 的⽤户要多
这些⼈基本上编程⽔平要强⼀些
其他的提交者对增加这个特性没有特别强烈的反对
近 步介绍表达式引擎
那么它怎么使⽤呢?
是的,我想这可能会是你脑海⾥闪出的第⼀个问题。并且,我想你真正想问的是:“它
好⽤吗?”
如果你脑海⾥第⼀个问题不是这个,⽽是:“表达式引擎是神马东东?” 那么建议你不
⽤阅读本⽂了, 反正你也⽤不着。等你需要的时候,再读也不迟,反正这篇⽂章又不
长。
⽽关于 好⽤,还有下⾯这三层含义:
它容易使⽤吗?
System.out.println(El.eval(3+4*5).equals(23)); // 将打印 true,够
表达式接受的是字符串输⼊,输出则是⼀个Object对象,⽽Object对象本⾝是根据计算
结果进⾏进⾏了⾃动封装的。
它功能强⼤吗?
虽然在 #⼀些表达式的例⼦ 这⼀节我有更详细的例⼦,但是这⾥我必须要先概括⼏
点:
它⽀持变量,⽐如
Conte t conte t = Lang.conte t();
conte t.set(a, 10);
System.out.println(El.eval(conte t, a*10)); // 将打印 100
通过 Context 接⼜,你可以为你的表达式随意设置变量的值。它⽀持如下类型的 Java
数据
整型 - int 或 Integer
浮点 - float 或 Float
长整 - long 或 Long
布尔 - boolean 或 oolean
字符串 - String
数组 - T[]
列表 - LstTi
集合 - CollectionT
Map - MapString,?
普通 Java 对象
基本上,有了这些,你可以为所欲为了吧。
它速度怎么样?
我觉得它速度不怎么样。它的⼯作的原理是这样的,每次解析都经过如果下三步
1. 解析成后缀表达式形式的⼀个队列
2. 将后缀表达式解析成⼀棵运算树.
3. 对运算树的根结点进⾏运算.
当然我也提供了⼀个提升效率的⼿段,因为如果每次计算都经过这三个步骤当然慢,
所以我们可以对它先预编译:
El e p = new El(a*10); // 预编译结果为⼀个 El 对象
Conte t conte t = Lang.conte t();
conte t.set(a, 10);
System.out.println(e p.eval(conte t)); // 将打印 100
El在实例化时就会对表达式进⾏预编译,会直接编译成运算树,当调⽤eval⽅法时,
就不⽤再耗时的编译动作了.
它的 eval 函数是线程安全的,只要在多个线程内给它不同的 context 就是了。 当然,
你也可以在多个线程间共享同⼀个 Context ,那运⾏起来⼀定很有趣,不是吗?
⽀持什么样的操作符
我想但凡有机会和兴趣读到这篇⽂字的同学,⼀定是编程⽼⼿,即使是⾃称⼩⽩的的
同学们, 你们对⼀个编程语⾔应该⽀持的操作符基本都差不多熟的不⾏, 所以,我
就不在这⾥唠叨操作符的具体细节了,我只给⼀个列表,告诉你我现在⽀持什么操作
符。
另外,再加上⼀句:
只要⽀持的操作符,我会让它的优先级以及⾏为会和 Java 的表达式 致。如果你发
现不 致 别犹豫,给我报 Issue 吧。
权
符号 重 解释
() 100 括号,优先计算
文档评论(0)