【干货】动态解析表达式和计算的场景(一)

前言

在很多项目中,经常会出现需要动态分析表达式和计算的场​​景,比如一些自动审计规则,或者在运行过程中通过维护的公式动态计算一些变量的值;由于场景的需要,都需要比较灵活的配置对应的表达式,然后希望在需要的时候可以根据维护的表达式计算出对应的值;刚好在和同事聊天的时候,提到了Flee,感觉很有用,赶紧和小伙伴们一起来Share一波吧。

正文1.逃离介绍

Flee 是 .NET 框架的表达式解析器和求值器,在运行时求值字符串表达式(例如:sqrt(a^2 + b^2),其中 a 和 b 是变量)。它的分析和计算速度相对较快且高效。

Flee 支持 Net6.0、Net5.0、Netstandard2.1、Netstandard2.0.

我们不要过多地谈论别人。举几个例子,感受一下。更多详情,朋友们可以去github查看:

github地址:

2.案例演示

通过控制台演示案例,可以安装Flee包。

2.1个超级简单的案例

代码中有具体的注释,这里不再详述步骤。截图如下:

这个简单表达式的内容已经确定,都可以计算,没有变量。

应用场景一:表达式固定,直接由对应的值进行计算。

应用场景2:表达式不固定,但是在公式维护的时候,有些变量值用特殊字符标记,然后以正则表达式的形式找到标记的变量,替换成对应的业务字段值。

例如:[a]+[b]+3.14,此时可以通过正则表达式找到方括号标记的变量,然后根据名称替换对应的中间变量对应的中间变量。值可以计算出来。

2.2 个带变量的表达式

代码中有具体的注释,这里不再详述步骤。截图如下:

这种带变量的形式比较灵活,可以任意配置,计算时把对应的变量附加到值上即可。有的朋友可能对变量应该如何调整有疑问。其实在实际应用场景中,很多需要传入的变量应该是知道的,只要按照公式的规则动态传值即可。

应用场景:和简单的情况不一样,不需要特殊的标签变量,这里可以直接传入正常的维护公式。这种情况比较灵活。可以为相关业务配置对应的公式,最后传递对应的变量进行计算,最后根据计算出来的值进行相关的业务处理。

2.3 种表达式组合

CalculationEngine 可以组合表达式进行计算。计算引擎会使用引擎内部其他表达式的结果和依赖关系,然后按顺序计算组合结果。

应用场景:这种情况一般用在有多个表达式的场景,就像Excel中多个单元格中的表达式一样,每个单元格都有一个表达式,然后有一个单元格就会引用表达式计算出来的值在其他单元格中,最后得到结果。

2.4个扩展函数

有时在项目中封装了计算逻辑,只需要传入需要的值,每个调用者不需要重写相关的计算逻辑。 Flee 还支持在表情中组合自我表达。定义的函数演示如下:

首先,在一个类中编写相关的方法。这里的方法必须是静态的、公开的,如下:

然后可以在表达式中使用,如下所示:

2.5 个支持可变参数的函数

同上,自定义一个方法,但是这个方法的参数是不确定的,可变的,如下:

在表达式中使用:

2.6 返回值是布尔类型的表达式

在实际应用场景中,有时只需要得到一个有无的结果,可能不需要计算一个具体的值;

应用场景:这种情况一般用于一些自动判断规则的需要。比如有些报表的结果对于不同的业务类型会有一个范围的取值。如果超出范围,则表示不合规,取决于人的判断。它可能没有那么有效;在这样比较数据的情况下,如果只是简单的比较,容易实现,如果是比较复杂的关系比较,这种方法比较灵活。

好了,暂时先说说怎么用吧。文中的图片已经包含了所有的代码。后面我也会把代码提交到github和码云上。

总结

以上仅列举了一些简单的使用示例,具体合作伙伴可以根据业务场景使用。如果你有更好的工具库,请留言,一起学习。

关注“Code Variety Circle”和我一起学习。

© 版权声明
THE END
喜欢就支持一下吧
点赞267赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容