1. AviatorScript介紹
AviatorScript是一個(gè)高性能的規(guī)則引擎,并且提供了豐富的API來(lái)操作Java對(duì)象。
1.1 AviatorScript特點(diǎn)介紹
AviatorScript具有以下特點(diǎn):
2. AviatorScript使用
2.1 引入依賴(lài)
2.2 編寫(xiě)代碼
例子1
通過(guò)以上代碼就完成了第一個(gè)AviatorScript腳本的運(yùn)行。
例子2
接下來(lái)我們通過(guò)一段代碼實(shí)現(xiàn)一個(gè)條件表達(dá)式的計(jì)算。
例子3
下面我們通過(guò)定義一個(gè)稍微復(fù)雜的條件表達(dá)式來(lái)實(shí)現(xiàn)自動(dòng)的計(jì)算從而得到比較結(jié)果
通過(guò)以上三個(gè)例子可以看到Aviator可以通過(guò)調(diào)用compile()方法傳入對(duì)應(yīng)的腳本文本,得到一個(gè)Expression對(duì)象,最終會(huì)由這個(gè)對(duì)象去調(diào)用execute()方法去進(jìn)行運(yùn)算得到結(jié)果,這個(gè)方法有個(gè)好處就是可以接收一個(gè)Map對(duì)象來(lái)給腳本中的變量賦值,可以實(shí)現(xiàn)根據(jù)用戶(hù)填報(bào)的條件給變量進(jìn)行不同賦值獲取動(dòng)態(tài)的運(yùn)算結(jié)果,這樣就極大給我們省了很多的代碼編寫(xiě),條件的比較過(guò)程我們可以交給Aviator來(lái)幫我們實(shí)現(xiàn)。同樣的,我們也可以通過(guò)構(gòu)建不同的Map對(duì)象,復(fù)用Expression對(duì)象,對(duì)一個(gè)表達(dá)式進(jìn)行反復(fù)求值。下面在例子3的基礎(chǔ)上構(gòu)建一個(gè)新的Map對(duì)象,對(duì)同一個(gè)表達(dá)式進(jìn)行多次求值,可以看到根據(jù)不同的賦值,得到不同的運(yùn)算結(jié)果。
例子4
在實(shí)際的開(kāi)發(fā)場(chǎng)景中我們可能往往不會(huì)清楚的知道條件表達(dá)式中會(huì)有多少未初始化的變量,這個(gè)時(shí)候我們可以通過(guò)調(diào)用Expression的getVariableNames()方法。還是通過(guò)上面這個(gè)例子的條件表達(dá)式進(jìn)行變量的打印來(lái)舉例說(shuō)明,
例子5
AviatorScript也支持對(duì)邏輯運(yùn)算符&&和||起別名,在設(shè)置別名后原來(lái)的運(yùn)算符也還可以繼續(xù)使用。
例子6
以上就是AviatorScript的基本使用,除此之外AviatorScript還支持很多其他的功能,比如:
3.應(yīng)用場(chǎng)景
AviatorScript通過(guò)靈活的表達(dá)式配置可以應(yīng)用在規(guī)則判斷、公式計(jì)算、動(dòng)態(tài)腳本控制以及數(shù)據(jù)ETL場(chǎng)合中,也能夠應(yīng)用在一些邊緣計(jì)算的場(chǎng)景,根據(jù)提前定義好的條件規(guī)則對(duì)數(shù)據(jù)進(jìn)行提前一步的處理。AviatorScript可以滿(mǎn)足我們絕大多數(shù)場(chǎng)景下的使用需求,它非常的輕量,支持靈活的擴(kuò)展,應(yīng)用在項(xiàng)目中可以提高業(yè)務(wù)的靈活性,降低開(kāi)發(fā)的工作量。