轻量级-Java-表白式引擎-aviator-不容错过的优秀选用 (轻量级javaee企业应用实战pdf下载)
aviator原本是一个轻量级、高性能的基于JVM的表白式引擎。不过从5.0.0版本开局,aviator更新成为了aviatorScript,成为一个高性能、轻量级寄宿于JVM(包含平台)之上的脚本言语。
依据官方的引见,aviator支持的关键个性:
经常使用场景包含:
aviator基本经常使用
基本表白式
要经常使用aviator,只有要参与相应依赖:
<dependency><groupId>com.code.aviator</groupId><artifactId>aviator</artifactId><version>5.3.3</version></dependency>
而后就可以启动表白式求值了:
//前往值为16Longr=(Long)AviatorEvaluator.execute("2*(3+5)");
为了优化性能,往往先编译表白式,而后可以重复口头,启动表白式求值:
Expressionexpression=AviatorEvaluator.compile("2*(3+5)");Longr=(Long)expression.execute();
aviator支持数字、字符串、布尔值等基本数据类型,数字类型值都当作long或double类型处置。关注工众号:码猿技术专栏,回复关键词:1111失掉阿里外部java性能调优手册!所以下面例子的求值结果是Long。
aviator表白式支持大局部的运算操作符,如罕用的算术运算操作符(+、-、*、/、%)、逻辑运算操作符(&&、||、!)、比拟运算操作符(>、>=、==、!=、<、<=)、位运算操作符(&、|、^、<<、>>)和优先级操作符,还支持三元操作表白(?:)、正则表白式(=~)。
一些例子:
//前往helloworldStringr=(String)AviatorEvaluator.execute("'hello'+'world'");//前往trueBooleanr=(Boolean)AviatorEvaluator.execute("100>80&&30<40");//三元表白式,前往30Longr=(Long)AviatorEvaluator.execute("100>80?30:40");//正则表白式,正则表白式放在//之间,前往trueBooleanr=(Boolean)AviatorEvaluator.execute("'hello'=~/[\w]+/");
表白式变量
跟其余表白式引擎一样,aviator也是支持表白式求值时传入参数的:
Longa=12L;Booleanr=(Boolean)AviatorEvaluator.exec("a>10",a);
参数也可以是一个列表,如下:
List<Long>a=newArrayList<>();a.add(12L);a.add(20L);Booleanr=(Boolean)AviatorEvaluator.exec("a[0]>10",a);
也可以是一个对象:
publicstaticclassPerson{privateStringname;privateIntegerage;}Persona=newPerson("movee",25);Booleanr=(Boolean)AviatorEvaluator.exec("a.age>10",a);
跟普通地,aviator会将参数放到一个map中
Map<String,Object>env=newHashMap<>();env.put("person",newPerson("movee",25));env.put("a",20L);Objectresult=AviatorEvaluator.execute("person.name",env);
这样一来,aviator可以十分繁难的从json字符串中提取子json字符串
StringjsonStr="""{"a":{"b":[{"x":3},{"x":4}]}}""";JSONObjectjsonObj=newJSONObject(jsonStr);//结果前往3Objectvalue=AviatorEvaluator.execute("a.b[0]['x']",jsonObj.toMap());
经常使用函数
aviator曾经提供了很多开箱即用的函数了:
//前往4Longr=(Long)AviatorEvaluator.execute("math.round(4.3)");//前往5Longr=(Long)AviatorEvaluator.execute("string.length('hello')");//前往一个ArrayList:[1,2,3]Objectr=AviatorEvaluator.execute("seq.list(1,2,3)");
更具体的内置函数列表请参考:aviator函数库列表
咱们也可以自定义一个java函数,自己编写一个类,承袭aviator的AbstractFunction类,而后成功相应的方法即可:
publicclassAddFunctionextendsAbstractFunction{/***函数成功的性能*@paramenv参数*@paramarg1函数的第一个参数*@paramarg2函数的第二个参数*@return前往值*/@OverridepublicAviatorObjectcall(Map<String,Object>env,AviatorObjectarg1,AviatorObjectarg2){longnum1=FunctionUtils.getNumberValue(arg1,env).longValue();longnum2=FunctionUtils.getNumberValue(arg2,env).longValue();returnAviatorLong.valueOf(num1+num2);}/***注册到aviator的名字*@return函数名字*/@OverridepublicStringgetName(){return"add";}}
而后就可以注册到aviator中,像经常使用内置函数一样经常使用自定义函数:
//注册AviatorEvaluator.addFunction(newAddFunction());//经常使用longsum=(Long)AviatorEvaluator.getInstance().execute("add(3,4)");
aviatorScript脚本
aviator曾经更新为一个脚本言语,所以不只仅能启动表白式求值,还可以口头脚本程序。
//前往1Objectr=AviatorEvaluator.execute("if(true){return1;}else{return2;}");
aviatorScript脚本普通放到独立的脚本文件中,文件名后缀普通为
例如,咱们编写一个hello.av脚本文件,内容为:
if(a>10){return10;}else{returna;}
而后就可以口头该脚本文件,并传入参数a的值:
Map<String,Object>env=newHashMap<>();env.put("a",30);Expressionexp=AviatorEvaluator.getInstance().compileScript("./hello.av",true);Objectresult=exp.execute(env);
官方文档:
编程时选用的程序设计语言,对软件的开发与维护的影响?
【CSDN 编者按】“如果我们把人类文明想象成汽车的话,那么软件开发行业就相当于汽车的引擎,编程语言就像引擎的燃料。”作为一名开发者,需跟随技术潮流的发展来学习新技术。2020年,你有计划新学一门编程语言吗?
本文作者从一名架构师的角度,详细分析了7种现代编程语言的优点与功能,你对哪门语言最感兴趣呢?
作者 | Md Kamaruzzaman,软件架构师
译者 | 弯月,责编 | 伍杏玲
封图| CSDN 下载于视觉中国
出品 | CSDN(ID:CSDNnews)
以下为译文:
如果我们把人类文明想象成汽车的话,那么软件开发行业就相当于汽车的引擎,而编程语言就像引擎的燃料。作为一名开发者,今年你应该学习哪种编程语言呢?
学习一种新的编程语言无疑是时间、精力和智力上的巨大投资, 但是学习一种新的编程语言可以提升你的软件开发技术力,促进你的职业发展。
在这里,我将献上一份现代编程语言的列表,这些语言不仅有助于提高你的生产力,而且还可以促进你的职业发展,并让你成长为更优秀的开发人员。这份列表还涵盖了非常广泛的领域:系统编程、应用程序开发、Web开发、科学计算等。
什么是现代编程语言?
“现代编程语言”这个说法本身就很含糊。许多人认为Python和JavaScript等语言是现代编程语言,还认为Java是一种古老的编程语言。实际上,这几种语言大约在同一时间出现:1995年。
大多数主流编程语言是上个世纪开发的:七十年代(如C)、八十年代(如C ++)、九十年代(如Java、Python、JavaScript)。这些语言在设计上并没有考虑现代软件开发生态系统:多核CPU、GPU、快速的互联网、移动设备、容器和云等。尽管许多语言中的许多功能都已进行一些改进,如并发等,而且在不断调整自己以适应时代,但它们依然保留了向后兼容性,无法抛弃那些过时的旧功能。
在这方面,Python就做得很好(某种意义上也未必是好事),Python 2和Python 3两者之间有明确的分界线。很多语言常常会为解决同一个问题提供十余种的方法,同时又没有顾及到开发人员的感受。根据StackOverflow的开发人员调查,大多数旧时的主流编程语言在“最可怕的语言”排名都名列前茅:
如果非要在新旧编程语言之间划个界限的话,那么应该是2007年6月29日,也就是第一台iPhone发行的时候。在这之后,编程语言界发生了很大变化。因此,在本文的列表中,我只考虑2007年以后的编程语言。
为什么要学习新语言?
首先,现代编程语言充分利用现代计算机硬件(多核CPU、GPU、TPU)、移动设备、大量数据、高速互联网、容器和云的优势。大多数现代编程语言会关注开发人员的体验,比如:
aviator 2.0版本发布,轻量级高性能Java表达式求值器
Aviator的设计思路跟利用GroovyObject的求值思路是一样的,通过编译并动态生成字节码的方式将表达式编译成一个类,然后反射执行这个类,因此会在效率上比纯解释执行的IKExpression好一些。 自从上次发布1.0后,还发过1.01版本,不过都没怎么宣传。 这次发布一个2.0的里程碑版本,主要改进如下:1、完整支持位运算符,与java完全一致。 2、优化了性能,平均性能提升100%,函数调用性能提升200%, 3、添加了新函数,包括long、double、str等用于类型转换的函数,添加了函数。 4、完善了用户手册,更新了性能测试。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。