Power Fx 是將跨 Microsoft Power Platform 使用的低代碼語言。 它是一種強(qiáng)類型、聲明性、一般用途的函數(shù)式編程語言。
Power Fx 用對(duì)人類友好的文本表示。 它是一種低代碼語言,制作者可以直接在類似 Excel 的公式欄或 Visual Studio Code 文本窗口中使用。 低代碼中的“低”是由于語言的簡(jiǎn)潔性和簡(jiǎn)單性,讓制作者和開發(fā)人員都可以輕松進(jìn)行一般的編程任務(wù)。 它可以進(jìn)行從面向沒有編程經(jīng)驗(yàn)的用戶的無代碼到面向經(jīng)驗(yàn)豐富的專業(yè)人士的“專業(yè)代碼”的全面開發(fā),無需通過學(xué)習(xí)或重寫來解決二者之間的差異,從而使不同的團(tuán)隊(duì)可以協(xié)作并節(jié)省時(shí)間和費(fèi)用。
Power Fx 將對(duì)象與類似于聲明性電子表格的公式綁定在一起。 例如,將 UI 控件的 Visible 屬性視為 Excel 工作表中的單元格,它具有基于其他控件的屬性來計(jì)算其值的關(guān)聯(lián)公式。 公式邏輯會(huì)自動(dòng)重新計(jì)算該值,這與電子表格的方式類似,這會(huì)影響控件的可見性。
此外,Power Fx 也根據(jù)需要提供命令性邏輯。 工作表通常沒有可以將更改提交到數(shù)據(jù)庫的按鈕,但是應(yīng)用通常會(huì)有。 相同的表達(dá)式語言用于聲明性和命令性邏輯。
Power Fx 將作為開源軟件提供。 它目前已集成到畫布應(yīng)用中,您現(xiàn)在就可以在其中體驗(yàn)一下。 我們正在從 Power Apps 中提取它,以用于其他 Microsoft Power Platform 產(chǎn)品并用作開放源代碼。
讓我們更深入地了解 Power Fx 可為我們執(zhí)行的所有工作,以及因?yàn)楣绞锹暶餍缘亩仨殐?yōu)化的自由度:
- 異步:Power Fx 中的所有數(shù)據(jù)操作都是異步的。 制作者不需要對(duì)此進(jìn)行指定,也不需要在調(diào)用結(jié)束后同步操作。 制作者根本不需要知道此概念,也不需要了解什么是 promise 或 lambda 函數(shù)。
- 本地和遠(yuǎn)程:Power Fx 使用與數(shù)據(jù)庫或服務(wù)中本地內(nèi)存中和遠(yuǎn)程數(shù)據(jù)相同的語法和函數(shù)。 用戶不需要考慮此區(qū)別。 Power Fx 自動(dòng)將相關(guān)內(nèi)容委派到服務(wù)器以更有效地處理篩選器和排序。
- 關(guān)系數(shù)據(jù):訂單和客戶是兩個(gè)不同的表,具有多對(duì)一關(guān)系。 OData 需要“$expand”以及有關(guān)外鍵(類似于 SQL 中的聯(lián)接)的知識(shí)。 公式中沒有此內(nèi)容,實(shí)際上,數(shù)據(jù)庫密鑰是制作者無需了解的另一個(gè)概念。 制作者可以使用簡(jiǎn)單的點(diǎn)表示法從記錄中訪問關(guān)系的整個(gè)圖形。
- 投影:編寫查詢時(shí),很多開發(fā)人員會(huì)編寫 select * from table,這會(huì)返回所有數(shù)據(jù)列。 Power Fx 分析在整個(gè)應(yīng)用中,甚至跨公式依賴關(guān)系使用的所有列。 投影會(huì)自動(dòng)優(yōu)化,同樣,制作者不需要知道“投影”的含義。
- 僅檢索所需內(nèi)容:在此示例中,LookUp 函數(shù)意味著只應(yīng)檢索一條記錄,這就是返回的全部?jī)?nèi)容。 如果使用 Filter 函數(shù)請(qǐng)求更多記錄—可能有數(shù)千條記錄符合條件,一次將僅返回一頁數(shù)據(jù),每頁大約 100 條記錄。 用戶必須對(duì)庫或數(shù)據(jù)表進(jìn)行手勢(shì)操作來查看更多數(shù)據(jù),系統(tǒng)會(huì)自動(dòng)為他們引入數(shù)據(jù)。 制作者可以推出大型數(shù)據(jù)集,而無需考慮將數(shù)據(jù)請(qǐng)求限制為可管理的區(qū)塊。
- 僅在需要時(shí)運(yùn)行:我們?yōu)闃?biāo)簽控件的 Text 屬性定義了一個(gè)公式。 當(dāng)所選變量發(fā)生更改時(shí),LookUp 將自動(dòng)重新計(jì)算并且標(biāo)簽將更新。 制作者不需要為“選擇”編寫 OnChange 處理程序,也不需要記住此標(biāo)簽依賴于它。 這是如前所述的聲明性編程:制作者指定他們想要在標(biāo)簽中包括哪些內(nèi)容,而沒有指定獲取它的方式或時(shí)間。 如果此標(biāo)簽不可見是因?yàn)樗谄聊簧喜豢梢姡蛘咚?Visible 屬性為 false,我們可以將此計(jì)算推遲到標(biāo)簽可見之后,來有效地消除這種情況(如果這種情況很少發(fā)生)。
- Excel 語法翻譯:很多用戶都使用 Excel,其中大多數(shù)人都知道與號(hào) (&) 用于字符串連接。 JavaScript 使用加號(hào) ( ),其他語言使用點(diǎn) (.)。
- 顯示名稱和本地化:First Name 用于 Power Fx 公式,而 nwind_firstname 用于 JavaScript 等效項(xiàng)。 在 Microsoft Dataverse 和 SharePoint 中,除了唯一的邏輯名稱外,還有列和表的顯示名稱。 在這種情況下,顯示名稱通常要對(duì)用戶友好得多,但是它們還有另一個(gè)重要的品質(zhì),就是它們可以本地化。 如果您有一個(gè)多語言團(tuán)隊(duì),每個(gè)團(tuán)隊(duì)成員都可以使用自己的語言查看表和字段名稱。 在所有用例中,Power Fx 都會(huì)確保將正確的邏輯名自動(dòng)發(fā)送到數(shù)據(jù)庫。
無代碼
您不必讀取和寫入 Power Fx 就可以開始表達(dá)邏輯。 可以通過簡(jiǎn)單切換和 UI 生成器表達(dá)許多自定義和邏輯。 這些無代碼工具被構(gòu)建為讀取和寫入 Power Fx,以確保有足夠的凈空讓用戶進(jìn)一步利用它,同時(shí)也要承認(rèn)無代碼工具將永遠(yuǎn)無法提供完整語言的全部表達(dá)能力。 即使與無代碼生成器一起使用,公式欄也在 Power Apps 中處于前沿和中心位置,用于培訓(xùn)制作者將代表他們執(zhí)行哪些操作,以便他們可以開始了解 Power Fx。
讓我們來看看一些示例。 在 Power Apps 中,屬性窗格為控件的屬性提供無代碼切換和旋鈕。 實(shí)際上,大多數(shù)屬性值都是靜態(tài)值。 您可以使用顏色生成器來更改 Gallery 的背景顏色。 請(qǐng)注意,公式欄將反映此更改,將公式更新為其他 RGBA 調(diào)用。 您隨時(shí)可以轉(zhuǎn)到公式欄,進(jìn)一步進(jìn)行操作—在本示例中,是使用 ColorFade 調(diào)整顏色。 顏色屬性仍會(huì)顯示在屬性面板中,但是將鼠標(biāo)懸停在上面時(shí)會(huì)顯示 fx 圖標(biāo),您將被定向到公式欄。 這可以通過兩種方式完全實(shí)現(xiàn):刪除 ColorFade 調(diào)用將使顏色返回到屬性面板可以理解的內(nèi)容,您可以再次使用它來設(shè)置顏色。
下面是一個(gè)更復(fù)雜的示例。 庫顯示來自 Dataverse 的員工列表。 Dataverse 提供表數(shù)據(jù)的視圖。 我們可以選擇這些視圖之一,公式將更改為使用包含此視圖名稱的 Filter 函數(shù)。 兩個(gè)下拉菜單可用于撥入正確的表和視圖,而無需接觸公式欄。 但是,假設(shè)您需要進(jìn)一步處理,添加排序。 我們可以在公式欄中執(zhí)行此操作,屬性面板將再次顯示 fx 圖標(biāo)并將修改定向到公式欄。 同樣,如果我們將公式簡(jiǎn)化為屬性面板可以讀取和寫入的內(nèi)容,可以再次使用它。
這些都是簡(jiǎn)單的示例。 我們認(rèn)為 Power Fx 是描述無代碼交互的良好語言。 該語言簡(jiǎn)明、強(qiáng)大且易于分析,并提供對(duì)低代碼“無差異”所需的常用凈空。
專業(yè)代碼
低代碼制作者有時(shí)會(huì)構(gòu)建需要專家?guī)椭蛴蓪I(yè)開發(fā)人員接管的東西,以進(jìn)行維護(hù)和增強(qiáng)。 專業(yè)人士也贊同,與生成專業(yè)工具相比,低代碼開發(fā)更容易、更快速且成本更低。 并非所有情況都需要 Visual Studio 的完整功能。
專業(yè)人士希望使用專業(yè)工具來提高效率。 Power Fx 公式可以存儲(chǔ)在 YAML 源文件中,這些文件可以使用 Visual Studio Code、Visual Studio 或任何其他文本編輯器輕松地進(jìn)行編輯,并支持通過 GitHub、Azure DevOps 或任何其他源代碼控制系統(tǒng)將 Power Fx 置于源代碼管理下。
Power Fx 支持基于公式的組件,以便共享和重用。 我們宣布了支持組件屬性的參數(shù),支持創(chuàng)建純用戶定義的函數(shù),并在此過程中進(jìn)行更多增強(qiáng)。
此外,Power Fx 還適用于將專業(yè)人士生成的組件和服務(wù)組合在一起。 現(xiàn)成連接器提供對(duì)數(shù)百個(gè)數(shù)據(jù)源和 Web 服務(wù)的訪問權(quán)限,自定義連接器使 Power Fx 可以與任何 REST Web 服務(wù)通信,代碼組件使 Power Fx 可以與屏幕和頁面上完全自定義的 JavaScript 進(jìn)行交互。
設(shè)計(jì)原則
簡(jiǎn)單
Power Fx 主要針對(duì)未受過開發(fā)人員培訓(xùn)的制作者受眾。 如果可能,我們使用此訪問群體已知或者可以快速汲取的知識(shí)。 成功所需的概念數(shù)將降到最低。
設(shè)計(jì)簡(jiǎn)單對(duì)開發(fā)人員也有益。 對(duì)于開發(fā)人員訪問群體,我們旨在設(shè)計(jì)一種可以減少生成解決方案所需時(shí)間的低代碼語言。
Excel 一致性
Microsoft Power Fx 語言大量借用 Excel 公式語言。 我們尋求利用很多也使用 Excel 的制作者的 Excel 知識(shí)和經(jīng)驗(yàn)。 類型、運(yùn)算符和函數(shù)語義盡可能與 Excel 接近。
如果 Excel 沒有答案,我們接下來會(huì)期待 SQL。 在 Excel 之后,SQL 是下一種最常用的聲明性語言,它可以提供有關(guān) Excel 不提供的數(shù)據(jù)操作和強(qiáng)鍵入的指導(dǎo)。
聲明性
制作者描述他們希望自己的邏輯做 什么,而不是確切的 如何 或 何時(shí) 做。 這讓編譯器可以通過并行執(zhí)行操作,將工作推遲到需要時(shí)以及預(yù)取和重用緩存的數(shù)據(jù)來進(jìn)行優(yōu)化。
例如,在 Excel 工作表中,作者定義單元格之間的關(guān)系,但是 Excel 決定何時(shí)以及以什么順序?qū)竭M(jìn)行求值。 類似地,應(yīng)用中的公式可以根據(jù)需要基于用戶操作、數(shù)據(jù)庫更改或計(jì)時(shí)器事件,被視為的“recalc-ing”。
函數(shù)式
我們偏愛沒有副作用的純函數(shù)。 這樣可以使邏輯更容易理解,并為編譯器提供最大的優(yōu)化自由。
與 Excel 不同,應(yīng)用本質(zhì)上確實(shí)會(huì)改變狀態(tài)—例如,應(yīng)用具有將更改保存到數(shù)據(jù)庫中記錄的按鈕。 因此,某些函數(shù)確實(shí)有副作用,盡管我們已盡可能限制它。
組合
在可能的情況下,添加的功能可以與現(xiàn)有功能很好地結(jié)合在一起。 強(qiáng)大的函數(shù)可以分解為較小部分,它們更易于單獨(dú)使用。
例如,庫 控件沒有單獨(dú)的 Sort 和 Filter 屬性。 相反,Sort 和 Filter 函數(shù)將組合成一個(gè) Items 屬性。 表達(dá) Sort 和 Filter 行為的 UI 通過為此屬性使用雙向編輯器,被放置在 Items 屬性的上層。
強(qiáng)類型
所有值的類型在編譯時(shí)已知。 這允許在創(chuàng)作時(shí)及早檢測(cè)到錯(cuò)誤并提供豐富的建議。
支持多態(tài)類型,但是必須先將其類型固定為靜態(tài)類型,并且必須在編譯時(shí)知道該類型,才能夠使用它們。 提供 IsType 和 AsType 函數(shù)以測(cè)試和轉(zhuǎn)換類型。
類型推理
類型從其使用中派生,不需要聲明。 例如,將變量設(shè)置為數(shù)字會(huì)導(dǎo)致變量的類型被建立為數(shù)字。
類型使用沖突會(huì)導(dǎo)致編譯時(shí)錯(cuò)誤。
區(qū)域設(shè)置相關(guān)小數(shù)分隔符
世界上有些區(qū)域使用點(diǎn) (.) 作為小數(shù)點(diǎn)分隔符,而其他區(qū)域使用逗號(hào) (,)。 這也是 Excel 功能。 其他編程語言通常不會(huì)這樣做,這些語言通常為全球所有用戶使用公認(rèn)的點(diǎn) (.) 作為小數(shù)點(diǎn)分隔符。 為了盡可能使所有級(jí)別的制作者都可以上手使用,對(duì)于一生中一直使用該語法的一個(gè)法國(guó)人來說,3,14 是一個(gè)十進(jìn)制數(shù)字很重要。
選擇小數(shù)分隔符對(duì)用于函數(shù)調(diào)用參數(shù)的列表運(yùn)算符和鏈接運(yùn)算符具有級(jí)聯(lián)影響。
區(qū)域設(shè)置相關(guān)小數(shù)分隔符 | |||
作者的語言小數(shù)分隔符 | Power Fx 小數(shù)分隔符 | Power Fx 列表分隔符 | Power Fx 鏈接運(yùn)算符 |
. (點(diǎn)) | . (點(diǎn)) | ,(逗號(hào)) | ;(分號(hào)) |
,(逗號(hào)) | ,(逗號(hào)) | ;(分號(hào)) | ;;(雙分號(hào)) |
詳細(xì)信息:全球支持
不面向?qū)ο?/h1>
Excel 不面向?qū)ο?,Power Fx 也是。 例如,在某些語言中,字符串的長(zhǎng)度表示為字符串的屬性,例如 JavaScript 中的 "Hello World".length。 Excel 和 Power Fx 則以函數(shù)形式將其表達(dá)為 Len( "Hello World" )。
具有屬性和方法的組件面向?qū)ο?,Power Fx 可輕松使用它們。 但是,如果可能,我們更愿意使用函數(shù)式方法。
可擴(kuò)展
制作者可以使用 Power Fx 本身來創(chuàng)建組件和函數(shù)。 開發(fā)人員可以通過編寫 JavaScript 創(chuàng)建其組件和函數(shù)。
對(duì)開發(fā)人員友好
雖然制作者是我們的主要目標(biāo),但我們也嘗試盡可能對(duì)開發(fā)人員友好。 如果與前面描述的設(shè)計(jì)原則不沖突,那么我們將以開發(fā)人員喜歡的方式來設(shè)計(jì)。 例如,Excel 沒有添加注釋的功能,因此我們使用類似于 C 的行和內(nèi)聯(lián)注釋。
語言演變
不斷發(fā)展的編程語言既必要又棘手。 每個(gè)人都—有理由—擔(dān)心更改可能破壞現(xiàn)有代碼,而且需要用戶學(xué)習(xí)新模式,無論更改的背后有多大的好意。 Power Fx 十分重視后向兼容性,但我們也堅(jiān)信,雖然,我們不會(huì)總是在一開始就能做對(duì),但我們會(huì)共同去了解作為一個(gè)社區(qū)怎樣做是最好的。 我們必須進(jìn)行演變,Power Fx 從一開始就設(shè)計(jì)了對(duì)語言演變的支持。
保存的每個(gè) Power Fx 文檔都包含一個(gè)語言版本標(biāo)記。 如果我們要進(jìn)行不兼容的更改,我們會(huì)編寫稱之為“反向兼容轉(zhuǎn)換器”的功能,在下次公式被編輯時(shí)自動(dòng)重寫該公式。 如果更改是我們需要培訓(xùn)用戶的主要內(nèi)容,我們還將顯示一條消息,其中包含指向文檔的鏈接。使用此功能,我們?nèi)匀豢梢约虞d多年前使用 Power Apps 預(yù)覽版構(gòu)建的應(yīng)用,不管那之后發(fā)生了多少更改。
例如,我們引入了 ShowError 函數(shù)來顯示帶有紅色背景的錯(cuò)誤橫幅。
雖然用戶喜歡它,但他們還請(qǐng)求我們提供一種顯示成功橫幅(綠色背景)或信息性橫幅(藍(lán)色背景)的方法。 因此,我們提出了一個(gè)更通用的 Notify 函數(shù),來為通知類型獲取第二個(gè)參數(shù)。 我們本來可以添加 Notify 并按原樣保留 ShowError,但是我們改為用 Notify 代替 ShowError。 我們刪除了以前一直使用的函數(shù),用其他函數(shù)代替了它。 由于有兩種方法可以做同一件事,因此,這會(huì)引起混亂—特別是對(duì)于新用戶,最重要的是,這會(huì)增加復(fù)雜性。 沒有人抱怨,所有人都贊成此更改,然后遷移到下一個(gè)通知功能。
這是相同的應(yīng)用在加載到最新版本的 Power Apps 中時(shí)的外觀。 用戶無需執(zhí)行任何操作即可進(jìn)行此轉(zhuǎn)換,它將在打開應(yīng)用時(shí)自動(dòng)發(fā)生。
憑借這一才能,Power Fx 可以比大多數(shù)編程語言更快、更進(jìn)取。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。