当前位置:首页 > 数码 > 轻量级-Java-表白式引擎-aviator-不容错过的优秀选用 (轻量级javaee企业应用实战pdf下载)

轻量级-Java-表白式引擎-aviator-不容错过的优秀选用 (轻量级javaee企业应用实战pdf下载)

admin7个月前 (04-16)数码73

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)");
aviator

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、完善了用户手册,更新了性能测试。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Java

“轻量级-Java-表白式引擎-aviator-不容错过的优秀选用 (轻量级javaee企业应用实战pdf下载)” 的相关文章

深入探讨-Java-编程中的类继承与接口实现 (深入探讨交流)

深入探讨-Java-编程中的类继承与接口实现 (深入探讨交流)

简介 类索引、父类索引和接口索引是在 Class 文件中用于确定类的继承关系的重要数据。通过这些索引,Java 虚拟机 (JVM) 可以准确地建立类之间的继承关系,实现多态性和接口的实现。...

选择性-过多的关键词会增加SEO工作的复杂性-关键词不应过多 (选择性太多)

选择性-过多的关键词会增加SEO工作的复杂性-关键词不应过多 (选择性太多)

引言 在不断演进的软件开发领域,保持最新技术至关重要。从 Java 11 迁移到 Java 21 是一个明智的决定,它带来了显着的优势和创新,可以提升应用程序的安全性、性能和开发效率。...

助推高性能运行程序开发-革命性的并发编程处置打算-的虚构线程-Java-21 (高性能运作有什么用)

助推高性能运行程序开发-革命性的并发编程处置打算-的虚构线程-Java-21 (高性能运作有什么用)

21最关键的个性之一就是虚构线程(JEP444)。这些轻量级的线程降落了编写、保养和观察高吞吐量并行运行所需的致力。 在探讨新个性之前,让咱们先看一下以后的形态,以便更好地理解它试图处置什么...

Java中不倡导经常使用foreach的六大场景 (java中不等于怎么写)

Java中不倡导经常使用foreach的六大场景 (java中不等于怎么写)

在中,foreach是一个罕用的循环结构,它可以极大地简化遍历数组或汇合(例如List或Set)的代码。它通常被以为是一种愈加繁复和易读的迭代形式。但是,或许有一些状况下不倡导经常使用foreac...

消除反复编译困扰-优化效率-释放Java开发潜能 (消除反复编译命令)

消除反复编译困扰-优化效率-释放Java开发潜能 (消除反复编译命令)

在开发过程中,反复编译是一个常见的问题,特别是在大型项目或者需要频繁修改代码的情况下。每次修改代码后都需要重新编译整个项目,这样耗费了大量的时间和资源,降低了开发效率。为了解决这个问题,我们可以采...

Java-三分钟速成-揭秘多线程编程新范式-虚拟线程 (java三目表达式)

Java-三分钟速成-揭秘多线程编程新范式-虚拟线程 (java三目表达式)

背景 虚拟线程是 Java 语言中的一种轻量级线程,可以减少编写、维护和调试高吞吐量并发应用程序的工作量。虚拟线程的详细背景介绍可以在 JEP 444 中找到。 平台线程...

Java废品回收器对循环引用对象的处理机制 (java废弃方法)

Java废品回收器对循环引用对象的处理机制 (java废弃方法)

循环引用的定义和问题 循环引用是指两个或多个对象之间形成了相互引用的关系,形成了一个环状结构。例如,对象 A 引用了对象 B,而对象 B 又引用了对象 A,它们之间形成了一个循环引用。在这种情况...

Java连接池配置不当引起的连接泄漏和数据库连接数超限问题排查 (java连接sqlserver数据库代码)

Java连接池配置不当引起的连接泄漏和数据库连接数超限问题排查 (java连接sqlserver数据库代码)

连接池配置的重要性 连接池是一种用于管理数据库连接的技术,它可以提高系统性能和稳定性。合理配置连接池可以带来以下好处: 提高性能 节省资源 避免连接泄漏...