網(wǎng)站模板中心怎么投放廣告是最有效的
循環(huán)遍歷
由于VO語言是面向數(shù)據(jù)集的,其所有隱含的語義中都已經(jīng)帶有了遍歷并計(jì)算的數(shù)據(jù)邏輯。因此,VO語言只提供了一種支持循環(huán)語法的算子--Loop算子。
Loop算子
Loop算子是一個(gè)容器算子,其可以實(shí)現(xiàn)對(duì)其內(nèi)部子流程的循環(huán)迭代運(yùn)行。但Loop算子有一個(gè)強(qiáng)使用限定,就是其必須有前置算子向其傳輸數(shù)據(jù)流。
Loop算子驅(qū)動(dòng)內(nèi)嵌流程迭代執(zhí)行。迭代次數(shù)可由“迭代次數(shù)”參數(shù)進(jìn)行設(shè)置。若迭代次數(shù)設(shè)置為小于1的參數(shù),那么內(nèi)嵌流程必須有邏輯結(jié)束迭代操作。此時(shí),內(nèi)嵌流程必須有數(shù)據(jù)分支連接了退出端口。Loop算子會(huì)對(duì)該邏輯進(jìn)行檢查。
上圖表示了一個(gè)迭代復(fù)制數(shù)據(jù)集的邏輯。每次循環(huán)都會(huì)復(fù)制一個(gè)數(shù)據(jù)集,并將數(shù)據(jù)集通過數(shù)據(jù)輸出端口輸出。也可以編寫邏輯只在迭代結(jié)束后輸出數(shù)據(jù),這時(shí)候就需要內(nèi)嵌流程不是去連接數(shù)據(jù)輸出端口了,而是去連接退出端口了。Loop算子的退出端口一旦接受到數(shù)據(jù)集就會(huì)退出迭代,所以需要控制好何時(shí)向退出端口寫出數(shù)據(jù)。若即連接了退出端口又設(shè)置了迭代次數(shù),那么哪個(gè)條件先滿足,就用哪個(gè)條件退出迭代。
使用Loop算子有一個(gè)特別需要注意的事項(xiàng)就是,內(nèi)嵌流程必須與輸入端口與迭代輸出端口有連接。進(jìn)入Loop算子的每個(gè)數(shù)據(jù)集都會(huì)激活一次迭代計(jì)算。首次迭代時(shí),內(nèi)嵌流程收到的數(shù)據(jù)集來自前置算子,迭代過程中再次收到的數(shù)據(jù)則來自內(nèi)嵌流程的上一迭代的輸出了。這樣,內(nèi)嵌流程就可以實(shí)現(xiàn)對(duì)同一數(shù)據(jù)集的多次迭代計(jì)算了。
異常
目前,絕大多數(shù)通用語言都支持這種語法特性,用于簡化容錯(cuò)處理,確保未知運(yùn)行錯(cuò)誤可被捕獲并恢復(fù)運(yùn)行環(huán)境或進(jìn)入錯(cuò)誤處置。VO 語言也對(duì)該特性進(jìn)行了支持,方便開發(fā)者編寫復(fù)雜的數(shù)據(jù)流程。
異常捕獲
異常捕獲算子(ExceptionReporter)是一個(gè)容器算子。從其內(nèi)部看,是一個(gè)可以容納內(nèi)嵌流程的標(biāo)準(zhǔn)容器算子??梢跃帉懭我膺壿嫷牧鞒?。但是當(dāng)流程發(fā)生錯(cuò)誤,產(chǎn)生異常時(shí),其不會(huì)立刻將異常拋回給VO語言解釋器,由解釋器結(jié)束這個(gè)數(shù)據(jù)流程;而是捕獲異常,并將異常通過exceptionOut端口報(bào)出。可以在exceptionOut端口后加入異常信息處理邏輯,比如向Kafka同步異常狀態(tài)等。
異常捕獲算子有一個(gè)“是否異常退出”的控制參數(shù),若該值為true。那么當(dāng)異常發(fā)生且異常信息被成功寫出到exceptionOut端口后,異常捕獲算子會(huì)通知VO語言解釋器終止整個(gè)流程的運(yùn)行;若該值為false,那么數(shù)據(jù)流程會(huì)繼續(xù)執(zhí)行。流程執(zhí)行的恢復(fù)點(diǎn)因算子功能差異會(huì)不同,可能會(huì)有以下幾種情況:
-
算子忽略掉當(dāng)前產(chǎn)生異常的數(shù)據(jù),繼續(xù)執(zhí)行
-
算子忽略掉當(dāng)前產(chǎn)生異常的數(shù)據(jù)集,繼續(xù)執(zhí)行
-
算子無法恢復(fù)執(zhí)行,繼續(xù)產(chǎn)生異常。
拋異常
在開發(fā)過程中,如果數(shù)據(jù)出現(xiàn)某個(gè)特征即認(rèn)為不合理并需要退出整個(gè)流程時(shí),可以使用拋異常算子。拋異常算子支持設(shè)置異常碼和異常信息,用于記錄數(shù)據(jù)的業(yè)務(wù)邏輯問題。異常信息支持以上下文變量的方式即@{varName},將輸入端口輸入的數(shù)據(jù)拼裝進(jìn)異常信息中。上下文變量的名字必須是輸入數(shù)據(jù)集的列名,且只會(huì)將數(shù)據(jù)集的第一條信息作為代表拼裝入異常信息。拋異常算子經(jīng)常會(huì)與異常捕獲算子搭配使用。