前言
在很多項目中經常會出現需要動態解析表達式和計算的場景,比如一些自動審核規則,或者是一些變量的值通過維護的公式在運行過程中動態算出;由于場景需求,都需要比較靈活的配置對應的表達式,然后希望在需要的時候能根據維護的表達式計算出對應的值;剛好這塊和同事聊天的時候說到Flee,感覺挺好用,趕緊來和小伙伴們來分享一波。
正文
1. Flee簡介
Flee是一個用于. net框架的表達式解析器和求值器,可以在運行時計算字符串表達式的值(如:sqrt(a^2 + b^2),其中a、b是變量)。它的解析和計算速度是比較快和高效的。
Flee 支持Net6.0、Net5.0、Netstandard2.1、Netstandard2.0。
其他就不多嘮了,咱們直接上幾個實例感受一波,更多詳情小伙伴們可以去github上查閱:
github地址:https://github.com/mparlak/Flee
2. 案例演示
案例就通過控制臺演示了,安裝上Flee包即可。

2.1 超級簡單案例
代碼中有具體的注釋,這里就不再詳細說步驟了,截圖如下:

這種簡單表達式內容都已經確定,全是可以計算的,沒有變量。
應用場景1:表達式固定,直接通過對應的值拼接計算的場景。
應用場景2:表達式不固定,但是公式維護時針對一些變量值用特殊字符標記,然后通過正則表達式的形式找到標記的變量,并替換為對應的業務字段值。
如:[a]+[b]+3.14,這種情況是可以通過正則表達式將中括號標記的變量找出來的,然后根據對應的中間變量的名字替換對應的值就可以計算了。
2.2 帶變量的表達式
代碼中有具體的注釋,這里就不再詳細說步驟了,截圖如下:

這種帶變量的形式就相對比較靈活,可以任意配置,只需在計算的時候將對應的變量附上值即可。有小伙伴可能會有疑問,變量不確定咋整啊,其實在實際應用場景中,很多時候需要傳入的那些變量應該都知道,只是照著公式的規則動態傳值即可。
應用場景:和簡單案例中的不太一樣,不需要特殊標記變量,這里直接正常維護公式正常傳值即可。這種情況相對靈活,可以針對相關業務配置對應的公式,最后傳對應的變量進行計算,最后根據算出的值進行相關業務處理即可。
2.3 表達式組合
CalculationEngine 可以將表達式進行組合計算,計算引擎會使用引擎內部其他表達式的結果、依賴關系,然后按順序進行計算出組合之后的結果。

應用場景:這種情況一般用于有多個表達式的場景,就類似于Excel中多個單元格中的表達式一樣,每個單元格中都有表達式,然后有一個單元格就會引用其他單元格中的表達式計算出來的值,最后得出結果。
2.4 擴展函數
有時候在項目中會將計算邏輯進行封裝,只需要傳入需要值即可,不需要每個調用者還得重新進行編寫相關的計算邏輯,Flee也支持在表達式中組合使用自定義的函數,演示如下:
先在一個類中寫好相關的方法,這里的方法一定要是靜態的、公共的,如下:

然后就可以在表達式中用了,如下:

2.5 支持可變參數的函數
和上面使用方式一樣,自定義一個方法,只是這個方法的參數是不確定,可變的,如下:

在表達式中使用:

2.6 返回值是Boolean類型的表達式
在實際應用場景中,有些時候只需要得到一個是否的結果,可能不需要計算一個具體的值;

應用場景:這種情況一般用于一些自動判定規則的需求,比如有一些報表的結果在不同的業務類型時會有一個值的范圍,如果超出范圍就代表不合規,靠人為判斷的話可能就沒那么高效;類似這種對比數據的情況,如果只是簡單的比對還容易實現,如果是復雜一點的關系比對,這種方式就相對靈活了。
好了,使用方式就暫時說到這,文中圖片已經包含所有的代碼。稍后我也會把代碼提交github上和碼云上。
總結
上文只是列舉了一些簡單的使用實例,具體小伙伴們可以根據業務場景進行使用。小伙伴們如果有更好的工具庫,歡迎大家留言,一起學習。
關注“Code綜藝圈”,和我一起學習吧。