五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

打造類 EXCEL 的公式體系

2023-04-23 14:31 作者:支付寶體驗科技  | 我要投稿

編者按:本文作者是螞蟻集團前端工程師單涼,介紹了云鳳蝶的類 EXCEL 的公式體系,云鳳蝶是螞蟻集團內(nèi)部的表單、流程、頁面搭建平臺,為螞蟻員工提供無代碼/低代碼的標(biāo)準(zhǔn)應(yīng)用搭建服務(wù)。

公式是什么?

提到 EXCEL 表中的公式,大家應(yīng)該都有所了解。比如這個最簡單的 SUM 函數(shù),用來求取某個區(qū)域內(nèi)的數(shù)值之和:

EXCEL SUM 函數(shù)

EXCEL 用戶可以使用公式對數(shù)據(jù)進行匯總、排序、過濾、甚至還有一些公式函數(shù)可以用來調(diào)整表格的布局。?

總的來說:EXCEL 公式為靜態(tài)的表格注入了動態(tài)產(chǎn)出數(shù)據(jù)的能力。

鳳蝶應(yīng)用中的公式

先來看看云鳳蝶應(yīng)用是什么:

云鳳蝶是螞蟻集團內(nèi)部的表單、流程、頁面搭建平臺,為螞蟻員工提供無代碼/低代碼的標(biāo)準(zhǔn)應(yīng)用搭建服務(wù)。不需要技術(shù)支持、不需要寫代碼,業(yè)務(wù)人員可以獨自完成表單搭建和投放,以及收集到數(shù)據(jù)后的報表和數(shù)據(jù)分析。

圖片
云鳳蝶應(yīng)用的表單搭建能力


那么,如何實現(xiàn)這樣一個功能:對于如下的權(quán)限申請表單,當(dāng)申請人輸入「申請人工號」時,「申請人姓名」自動展示為對應(yīng)人員名稱?

圖片
表單搭建


在解決這個問題之前,我們先來看一下上面的權(quán)限申請表單:

用戶每次提交數(shù)據(jù),都會在該表單下新增一條表單實例,這條實例由四個不同字段組成(申請人工號、名稱、部門、申請原因)。

圖片
對應(yīng) EXCEl 的示例


因此,每個表單都可以簡單理解為一張如上圖所示的 EXCEL 表,而類比于 EXCEL 中公式的作用,云鳳蝶應(yīng)用下也產(chǎn)出了自己的公式形態(tài):

在云鳳蝶應(yīng)用下,只需要將「申請人名稱」的值配置器切換為「公式綁定」,然后配置對應(yīng)的公式:

圖片
切換為公式綁定
「申請人名稱」公式配置

簡而言之,云鳳蝶應(yīng)用提供了低技術(shù)門檻的數(shù)據(jù)收集相關(guān)能力,而公式體系為其中的表單搭建帶來了動態(tài)業(yè)務(wù)規(guī)則的書寫能力。

核心訴求:低上手門檻

基于上面的討論可以看到,打造公式體系,而不是使用現(xiàn)有編程語言的原因,便是用戶群體的差異,因此公式體系的設(shè)計核心,必須是簡單好用,即便沒有代碼基礎(chǔ)的用戶也能快速上手使用。

產(chǎn)品形態(tài)

公式編輯

EXCEL 公式的核心,便是將表格中的數(shù)據(jù)經(jīng)過計算與轉(zhuǎn)化,輸出結(jié)果到另一部分單元格中。類比在表單場景下,也無非是讓用戶使用一些處理函數(shù),針對自己的業(yè)務(wù)場景,對于表單項的值進行業(yè)務(wù)處理邏輯的書寫

  1. 內(nèi)置的處理函數(shù):幫助用戶處理文本、數(shù)字、復(fù)雜邏輯、信息獲取等各種場景;

  2. 表單項即變量:能夠看到當(dāng)前表單中的表單項,并可以將表單項的值作為公式參數(shù)使用;

  3. 低門檻的邏輯書寫器:擁有自己的編輯器,提供高亮、提示、校驗等能力,幫助用戶書寫公式。

公式編輯器

公式執(zhí)行

而該場景下,用戶書寫的業(yè)務(wù)邏輯,也一定是一種自動化的計算關(guān)系:當(dāng)我所使用的變量發(fā)生變化時,我的公式執(zhí)行結(jié)果總是對的。

即,一旦依賴項變化,公式應(yīng)該重新執(zhí)行:

圖片
申請人工號變化時,名稱需要聯(lián)動


主要能力

云鳳蝶應(yīng)用在公式能力上,集眾家之長:

?:不支持 ? ? ? ?:支持 ? ? ?? ??:優(yōu)秀


如何實現(xiàn)一套公式體系?

先看看一套公式體系都包含哪些內(nèi)容:

規(guī)范定義

語法規(guī)范

由于公式是為了沒有代碼基礎(chǔ)的用戶設(shè)計的,所以語法也應(yīng)該是簡單易懂的:

  • 操作符少:以云鳳蝶公式為例,僅支持二元操作符(A + B)與方法調(diào)用(SUM(1, 2, 3))兩種基礎(chǔ)語法格式;

  • 數(shù)據(jù)類型少:摒棄復(fù)雜的對象概念,用戶僅需理解基本的文本、時間、數(shù)字、集合操作就能書寫邏輯;

  • 內(nèi)置常用邏輯:將循環(huán)、分支、數(shù)據(jù)請求等編程領(lǐng)域的復(fù)雜邏輯抽象為公式函數(shù);內(nèi)置機制抹掉同步異步等概念。

圖片
同步異步 & 計算 & 邏輯

變量規(guī)范

變量規(guī)范是公式體系與業(yè)務(wù)間的橋梁,基本的變量定義主要包括:

  • 變量名稱:業(yè)務(wù)變量名稱,用于書寫數(shù)據(jù)處理規(guī)則;

  • 變量 Schema:聲明變量對應(yīng)的數(shù)據(jù)類型與結(jié)構(gòu),編輯器用來進行參數(shù)類型等校驗;

  • 編譯表達式:定義變量在編譯之后會被替換成怎樣的代碼。

編輯器中的物料及變量列表

物料規(guī)范

物料是公式體系最核心的擴展能力,復(fù)雜的平臺邏輯可以簡化為一個函數(shù),交給用戶使用

USERINFO 函數(shù)簡化了用戶信息的獲取


一個基本的公式物料包含以下部分:

  • 基礎(chǔ)定義:函數(shù)名稱、描述、文檔、示例等,交由編輯器展示;

  • 類型定義:參數(shù)及返回值定義,由校驗器進行解析并校驗,編輯器提示;

  • 物料實現(xiàn):具體的內(nèi)部邏輯代碼,交由執(zhí)行器執(zhí)行;

能力實現(xiàn)

編譯器

不管公式語法如何特殊,最終一定是在我們的代碼中執(zhí)行的。

由于公式語法的特殊性,不能直接在任何一門語言中執(zhí)行,因此需要一個編譯的過程,將用戶書寫的公式轉(zhuǎn)換成我們執(zhí)行時的語言(云鳳蝶的場景下為 JS 代碼)。

思路:使用 AST 樹來表達用戶所書寫的公式,并根據(jù)目標(biāo)環(huán)境的區(qū)別(如:編輯時回顯公式、運行時執(zhí)行代碼)選取對應(yīng)的編譯規(guī)則,將這棵 AST 樹中的特殊語法節(jié)點做轉(zhuǎn)化。最后再轉(zhuǎn)化成對應(yīng)的代碼文本。

這是一個針對于上面例子的簡易轉(zhuǎn)化圖例(高亮部分為需要轉(zhuǎn)化的特殊語法):

了解了實現(xiàn)原理后,問題就變簡單了,接下來只需要解決兩個問題:如何在 AST 樹與代碼之間互轉(zhuǎn),以及如何修建 AST 樹。

云鳳蝶選用的是?Antlr:一個可以高度自定義的開源語法解析器,適用于自定義語言的開發(fā)。(https://www.antlr.org/)

校驗器

校驗器本質(zhì)上是根據(jù)業(yè)務(wù)中定義的語法規(guī)則,遍歷 AST 樹,驗證每個節(jié)點與定義是否一致的過程。如下面的公式:

在之前的物料及變量定義的過程中,分別定義好了:

  1. USERINFO 及 TRUE 函數(shù)對應(yīng)的類型定義:

2.「申請人」變量對應(yīng)的變量 Schema:{ type: "string" }

在 AST 樹遍歷中進行對比這些信息,便可得到校驗結(jié)果:

執(zhí)行器

解決了公式編譯的問題,用戶書寫的公式便可以編譯成可以真實運行的運行時代碼,此時,執(zhí)行器可以簡單的理解為:在運行該代碼的執(zhí)行環(huán)境中,注入所依賴的變量和函數(shù)的值,從而得到運行結(jié)果

不過大多數(shù)業(yè)務(wù)場景下,我們還需要解決一個問題:如何在依賴的變量變化時,自動執(zhí)行公式?

這里可以對照前端框架的響應(yīng)式原理來進行實現(xiàn):

將公式中用到的變量作為表達式的依賴,借助 Proxy 監(jiān)聽這些變量的修改,當(dāng)變量修改后,重新執(zhí)行當(dāng)前公式。

業(yè)務(wù)接入

走到這里,我們便已經(jīng)探索完了公式體系的設(shè)計與核心實現(xiàn)。

接下來,當(dāng)業(yè)務(wù)方系統(tǒng)中有這樣非開發(fā)人員書寫動態(tài)規(guī)則的訴求時,如何幫他們接入公式體系呢?

例如,后端同學(xué)可能會用到數(shù)據(jù)加工表達式:(https://help.aliyun.com/document_detail/129147.html)

  1. 定義好業(yè)務(wù)側(cè)公式函數(shù):如上面的e_search、e_sete_drop_fileds等;

  2. 構(gòu)建變量列表,其中:

    1. 變量定義 + 公式編輯器,搭建自己的編輯鏈路,如上面的DROP

    2. 變量消費表達式 + 公式執(zhí)行器,完成執(zhí)行鏈路,如DROP對應(yīng)的實際調(diào)用。

  3. 自定義生成邏輯:生成運行環(huán)境下容易理解的運行時代碼,該場景下為 JAVA 代碼;

  4. 自定義語法(可選):完成更高級別的公式語法定制。

通過上面幾步定義,便可以僅消耗周級別的開發(fā)時間,接入業(yè)務(wù)規(guī)則書寫能力。

打造類 EXCEL 的公式體系的評論 (共 條)

分享到微博請遵守國家法律
抚宁县| 五峰| 萨嘎县| 连江县| 苍南县| 綦江县| 安岳县| 郴州市| 泽普县| 桑日县| 昭平县| 栖霞市| 双牌县| 林甸县| 金溪县| 华坪县| 汤阴县| 藁城市| 城口县| 治多县| 华蓥市| 天峻县| 湖北省| 磴口县| 开江县| 梨树县| 泸水县| 同江市| 平乡县| 蛟河市| 东源县| 介休市| 武陟县| 丹寨县| 汾阳市| 嘉祥县| 织金县| 城口县| 湛江市| 德钦县| 嘉鱼县|