Споделяне чрез


Общ преглед на Microsoft Power Fx

Power Fx е езикът с малко код, който ще се използва в Microsoft Power Platform. Това е език с общо предназначение, силен тип, декларативен и функционален език за програмиране.

Power Fx се изразява в удобен за човека текст. Това е език с нисък код, с който производителите могат да работят директно в подобна на Excel лента с формули или текстов прозорец за Visual Studio Code. „Малкото“ при малко код се дължи на лаконичния и прост характер на езика, което прави общите задачи по програмиране лесни както за създателите, така и за разработчиците. Той дава възможност за пълния спектър на разработка от „без код“ за тези, които никога преди не са програмирали, до „професионален код“ за опитен професионалист, без учене или пренаписване на скали между тях, което позволява на различни екипи да си сътрудничат и да спестят време и разходи.

Бележка

  • Microsoft Power Fx е новото име за езика на формулите за приложения на платното в Power Apps. Този преглед и свързаните статии са в процес на разработка, тъй като извличаме езика от приложенията на платното и го интегрираме с други продукти на Microsoft Power Platform и го направете достъпен като отворен код. За да научите повече и да се запознаете с езика още днес, започнете с Започнете работа с формулите в приложенията за платно в документацията на Power Apps и се регистрирайте за безплатна пробна версия на Power Apps.
  • В тази статия се позоваваме на производители, когато описваме функция, която може да се използва в двата края на спектъра на уменията за програмиране. Позоваваме се на потребителя като разработчик, ако функцията е по-напреднала и вероятно е извън обхвата на типичен потребител на Excel.

Power Fx свързва обектите заедно с декларативни формули, подобни на електронни таблици. Например, помислете за свойство Видимо на потребителски интерфейс като клетка в работен лист на Excel, със свързана формула, която изчислява стойността му въз основа на свойствата на други контроли. Логиката на формулата преизчислява стойността автоматично, подобно на това, което прави електронната таблица, което влияе на видимостта на контролата.

Също така, Power Fx предлага императивна логика, когато е необходимо. Обикновено работните листове нямат бутони, които могат да изпращат промени в база данни, но приложенията често имат. Същият език на израза се използва както за декларативна, така и за императивна логика.

Power Fx ще бъде предоставен като софтуер с отворен код. В момента тя е интегрирана в приложенията за платно и сме в процес на извличането ѝ от Power Apps за използване в други продукти на Microsoft Power Platform и като отворен код. Повече информация: Microsoft Power Fx на GitHub

Тази статия е преглед на езика и неговите принципи на проектиране. За да научите повече за Power Fx, вижте следните статии:

Мислете за електронна таблица

Ами ако можете да създадете приложение толкова лесно, колкото създавате работен лист в Excel?

Ами ако можете да се възползвате от съществуващите знания за електронните таблици?

Това бяха въпросите, които вдъхновиха създаването на Power Apps и Power Fx. Стотици милиони хора създават работни листове с Excel всеки ден; нека им донесем създаването на приложения, което е лесно и използва концепции на Excel, които вече знаят. Чрез разбиване на Power Fx от Power Apps, ще отговорим на тези въпроси за автоматизация на сгради, или виртуален агент, или други домейни.

Всички езици за програмиране, включително Power Fx, имат изрази: начин за представяне на изчисление върху числа, низове или други типове данни. Например, mass * acceleration в повечето езици изразява умножение на mass и acceleration. Резултатът от израз може да бъде поставен в променлива, използван като аргумент на процедура или вложен в по-голям израз.

Power Fx прави това още една крачка напред. Изразът сам по себе си не казва нищо за това, което изчислява. От производителя зависи да го постави в променлива или да го предаде на функция. В Power Fx, вместо да пишете само израз, който няма конкретно значение, вие пишете формула, която обвързва израза с идентификатор. Пишете force = mass * acceleration като формула за изчисляване на force. Когато mass или acceleration се промени, force автоматично се актуализира до нова стойност. Изразът описва изчисление, формула дава на изчислението име и го използва като рецепта. Ето защо ние наричаме Power Fx език на формулата.

Например тази формула от Stack Overflow търси низ в обратен ред. В Excel изглежда като следното изображение.

Обратно търсене

Екранна снимка на лента с формули в Excel с формулата: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) Клетка А1 съдържа текста "Здравей, Свят! Радвам се да се запознаем!" Клетка A2 съдържа текста "ти!"

Power Fx работи със същата тази формула, като препратките към клетки са заменени с препратки към свойства на контрола:

Power Fx обратно търсене.

Екранна снимка на формула на Power Fx в Power Apps. Формулата е =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) В полето за въвеждане под формулата текстът "Здравей, Свят! Радвам се да се запознаем!" се появява буква по буква. В същото време в полето Етикет се появяват буквите на последната дума. Когато в полето за въвеждане се появи пълният текст, в полето за етикет се появява думата "ти!".

Когато Input контролната стойност се променя, контролата Label автоматично преизчислява формулата и показва новата стойност. Няма манипулатори на събитие OnChange тук, както би било обичайно за други езици.

Друг пример, който използва формула за цвят Fill на екрана. Тъй като плъзгачите, които контролират червено, зелено и синьо, се променят, цветът на фона автоматично се променя, когато се преизчислява.

Цветен плъзгач.

Няма събития OnChange за плъзгачите, както е обичайно за други езици. Няма начин да зададете изрична Fill стойност на имота изобщо. Ако цветът не работи както се очаква, трябва да разгледате тази една формула, за да разберете защо не работи. Не е необходимо да търсите в приложението, за да намерите парче код, което задава свойството в неочакван момент; няма елемент на времето. Правилните стойности на формулата винаги се поддържат.

Тъй като плъзгачите са настроени на тъмен цвят, етикетите за червено, зелено и синьо се превръщат в бели, за да компенсират. Това става чрез проста формула на свойството Color за всяка контрола на етикета.

Power Fx цветни плъзгачи.

Страхотното в това е, че е изолирано от това, което се случва за Fill цвят: това са две напълно различни изчисления. Вместо големи монолитни процедури, логиката на Power Fx обикновено се състои от много по-малки формули, които са независими. Това ги прави по-лесни за разбиране и позволява подобрения, без да нарушава съществуващата логика.

Power Fx е декларативен език, точно както е Excel. Производителят определя какво поведение искат, но системата зависи да определи и оптимизира как и кога да го постигне. За да стане това практично, по-голямата част от работата се извършва чрез чисти функции без странични ефекти, което прави Power Fx също функционален език (отново, точно както е Excel).

Винаги на живо

Определящ аспект на работните листове е, че те винаги са активни и промените се отразяват мигновено. В работен лист няма режим на компилиране или изпълнение. Когато формулата се модифицира или се въведе стойност, работният лист незабавно се преизчислява, за да отрази промените. Всички открити грешки се появяват веднага и не пречат на останалата част от работния лист.

Същото се реализира и с Power Fx. Инкрементален компилатор се използва за непрекъснато синхронизиране на програмата с данните, върху които работи. Промените се разпространяват автоматично през графиката на програмата, засягайки резултатите от зависими изчисления, които могат да управляват свойства на контроли като цвят или позиция. Инкременталният компилатор също така предлага богат опит за редактиране на формули с IntelliSense, предложения, автоматично довършване и проверка на типа.

В анимацията по-долу номерът на поръчката се показва в контрола на етикета в зависимост от контрола на плъзгача, въпреки че има две грешки на етикетите под него. Приложението е много живо и интерактивно. Първият опит за фиксиране на формулата чрез въвеждане на .InvalidName води до незабавна червена линия и показва грешка, както би трябвало, но приложението продължава да работи.

Винаги живейте.

Когато въведете .Employee, това води до Data панел за добавяне на таблица Служители, метаданните за тази таблица се извличат и веднага се предлагат предложения за колони. Току-що преминахме през връзка от една таблица към друга и системата направи необходимите корекции в референциите на приложението. Същото се случва и при добавяне на .Customer.

След всяка промяна плъзгачът продължава с последната си стойност и всички променливи запазват стойността си. През цялото време номерът на поръчката продължава да се показва в горния етикет, както трябва. Приложението работи на живо, през цялото време обработва реални данни. Можем да го запазим, да се отдалечим, а други да го отворят и използват точно като Excel. Няма стъпка за изграждане, няма компилация, има само стъпка за публикуване, за да се определи коя версия на приложението е готова за потребители.

Малко код

Power Fx описва бизнес логиката в кратки, но същевременно мощни формули. Повечето логика може да бъде сведена до един ред с много изразителност и контрол за по-сложни нужди. Целта е да се сведе до минимум броят на понятията, които създателят трябва да разбира - в идеалния случай не повече, отколкото потребителят на Excel вече знае.

Например, за да търсите собствено име на служител за поръчка, пишете Power Fx, както е показано в следващата анимация. Отвъд концепциите на Excel, единствената добавена концепция, използвана тук, е точката "." нотация за пробиване в структура от данни, в този случай .Employee.'First Name'. Анимацията показва картографирането между частите на формулата Power Fx и концепциите, които трябва да бъдат кодирани изрично в еквивалентния JavaScript.

с малко код JavaScript.

Нека разгледаме по-задълбочено всички неща, които Power Fx прави за нас и свободата, която трябва да оптимизира, тъй като формулата беше декларативна:

  • Асинхронен: Всички операции Power Fx с данни са асинхронни. Производителят не трябва да посочва това, нито производителят трябва да синхронизира операциите след приключване на разговора. Производителят изобщо не трябва да е наясно с тази концепция, не е нужно да знае какво е обещание или ламбда функция.

  • Локален и отдалечен: Power Fx използва един и същ синтаксис и функции за данни, които са локални в паметта, и дистанционно свързва база данни или услуга. Потребителят не трябва да мисли за това разграничение. Power Fx автоматично делегира каквото може на сървъра, за да обработва филтри и сортира там по-ефективно.

  • Релационни данни: Поръчките и клиентите са две различни таблици с релация "много към едно". Заявката OData изисква "$expand" със знания за външния ключ, подобно на присъединяване в SQL. Формулата няма нищо от това, всъщност ключовете на базата данни са друга концепция, за която производителят не трябва да знае. Производителят може да използва проста точкова нотация за достъп до цялата графика на връзките от запис.

  • Проекция: Когато пишат заявка, много разработчици пишат select * from table, което връща всички колони с данни. Power Fx анализира всички колони, които се използват през цялото приложение, дори в зависимост от формули. Проекцията се оптимизира автоматично и отново производителят не трябва да знае какво означава „проекция“.

  • Извличане само на това, което е необходимо: В този пример LookUp функцията предполага, че трябва да се извлече само един запис и това е всичко, което се връща. Ако се изискват повече записи с помощта на функцията Filter, за което могат да се класират хиляди записи, връща се само една страница с данни наведнъж, от порядъка на 100 записа на страница. Потребителят трябва да направи жест през галерия или таблица с данни, за да види повече данни и тя автоматично ще бъде въведена за тях. Производителят може да разсъждава за големи набори от данни, без да се налага да мисли за ограничаване на заявките за данни до управляеми парчета.

  • Изпълнява се само когато е необходимо: Дефинирахме формула за свойството Text на контролата на етикета. С промяната на избраната променлива, LookUp се преизчислява автоматично и етикетът се актуализира. Производителят не е трябвало да пише манипулатор OnChange за избор и не е трябвало да помни, че този етикет зависи от него. Това е декларативно програмиране, както беше обсъдено по-рано, производителят посочи какво иска да има в етикета, а не как и кога трябва да бъде извлечен. Ако този етикет не се вижда, защото е на екран, който не се вижда, или неговото свойството Visible е false, можем да отложим това изчисление, докато етикетът се види и ефективно да го премахнем, ако това се случва рядко.

  • Превод на синтаксиса на Excel: Excel се използва от много потребители, повечето от които знаят, че амперсандът (&) се използва за конкатенация на низове. JavaScript използва знак плюс (+), а други езици използват точка (.).

  • Показвани имена и локализация: First Name се използва във формулата Power Fx , докато nwind_firstname се използва в еквивалента на JavaScript. В Microsoft Dataverse и SharePoint, има уникално име за колони и таблици в допълнение към уникално логическо име. Показваните имена често са много по-лесни за ползване, както в този случай, но имат друго важно качество, тъй като могат да бъдат локализирани. Ако имате многоезичен екип, всеки член на екипа може да вижда имената на таблици и полета на собствения си език. Във всички случаи на използване Power Fx гарантира, че правилното логическо име се изпраща автоматично до базата данни.

Без код

Не е нужно да четете и пишете Power Fx, за да започнете да изразявате логика. Има много персонализации и логика, които могат да бъдат изразени чрез прости превключватели и конструктори на потребителски интерфейс. Тези инструменти без код са създадени за четене и писане на Power Fx, за да гарантират, че има достатъчно място за някой, който да го направи по-нататък, като същевременно признават, че инструментите без код никога няма да предложат цялата изразителност на пълния език. Дори когато се използва с конструктори без код, лентата с формули е отпред и в центъра в Power Apps да обучи производителя за това какво се прави от тяхно име, за да могат да започнат да учат Power Fx.

Нека разгледаме някои примери. В Power Apps, панелът на свойствата осигурява превключватели и копчета "без код" за свойствата на контролите. На практика повечето стойности на свойствата са статични. Можете да използвате конструктора на цветове, за да промените цвета на фона на Gallery. Забележете, че лентата с формули отразява тази промяна, като актуализира формулата до различно извикване на RGBA. По всяко време можете да отидете на лентата с формули и да направите още една крачка напред в този пример, като използвате ColorFade за регулиране на цвета. Свойството цвят все още се появява в панела със свойства, но fx иконата се появява при нанасяне на курсора на мишката и сте насочени към лентата с формули. Това напълно работи по два начина: премахване на извикване на ColorFade връща цвета към нещо, което панелът на свойствата може да разбере и можете да го използвате отново, за да зададете цвят.

Цвят без код.

Ето един по-сложен пример. Галерията показва списък на служителите от Dataverse. Dataverse предоставя изгледи върху данните от таблицата. Можем да изберем един от тези изгледи и формулата се променя, за да използва Filter функция с това име на изглед. Двете падащи менюта могат да се използват за набиране на правилната таблица и изглед, без да докосвате лентата с формули. Но да предположим, че искате да отидете по-далеч и да добавите сортиране. Можем да го направим в лентата с формули и панелът със свойства отново показва икона fx и насочва модификациите към лентата с формули. И отново, ако опростим формулата до нещо, което панелът на свойствата може да чете и пише, той отново може да се използва.

Сортиране без код.

Това са прости примери. Ние вярваме, че Power Fx е чудесен език за описване на взаимодействия без код. Той е лаконичен, мощен и лесен за анализиране и осигурява толкова често необходимото пространство с „без скали“ до нисък код.

Професионален код

Производителите с нисък код понякога изграждат неща, които изискват помощта на експерт или са поети от професионален разработчик за поддържане и подобряване. Професионалистите също оценяват, че разработката с нисък код може да бъде по-лесна, по-бърза и по-евтина от създаването на професионален инструмент. Не всяка ситуация изисква пълната сила на Visual Studio.

Професионалистите искат да използват професионални инструменти, за да бъдат най-продуктивни. Формулите на Power Fx могат да се съхраняват в YAML изходни файлове, които са лесни за редактиране с Visual Studio Code, Visual Studio или друг текстов редактор и разрешете Power Fx да бъде поставен под контрол на източника с GitHub, Azure DevOps или друга система за контрол на изходния код.

Код за про Visual Studio .

Професионален код GitHub.

Power Fx поддържа базирани на формула компоненти за споделяне и повторна употреба. Обявихме поддръжка за параметрите на свойствата на компонентите, позволявайки създаването на чисти дефинирани от потребителя функции с повече подобрения по пътя.

Също така, Power Fx е чудесен в съчетаването на компоненти и услуги, създадени от професионалисти. Готовите съединители осигуряват достъп до стотици източници на данни и уеб услуги, персонализираните съединители позволяват на Power Fx да говори с всякаква REST уеб услуга, а кодовите компоненти позволяват на Power Fx да взаимодейства с напълно персонализиран JavaScript на екрана и страницата.

Принципи на проектиране

Опростен

Power Fx е предназначен за насочване към създателите, чиито членове не са обучени като разработчици. Където е възможно, ние използваме знанията, които тази аудитория вече би знаела или може да получи бързо. Броят на концепциите, необходими за успех, е сведен до минимум.

Да бъдеш прост също е добре за разработчиците. За аудиторията на разработчиците се стремим да бъдем език с нисък код, който намалява времето, необходимо за изграждане на решение.

Консистентност с Excel

Езикът Microsoft Power Fx заимства значително от езика на формулата на Excel. Ние се стремим да се възползваме от знанията и опита на Excel от много производители, които също използват Excel. Типовете, операторите и семантиката на функциите са възможно най-близки до Excel.

Ако Excel няма отговор, следващият поглед към SQL. След Excel, SQL е следващият най-често използван декларативен език и може да предостави насоки за операции с данни и силно писане, което Excel не прави.

Декларативно

Производителят описва Какво иска неговата логика да прави, не точно как или кога да го направи. Това позволява на компилатора да оптимизира чрез паралелно извършване на операции, отлагане на работата до необходимост и предварително извличане и повторно използване на кеширани данни.

Например в работен лист на Excel авторът определя връзките между клетките, но Excel решава кога и в какъв ред се оценяват формулите. По същия начин, формулите в приложението могат да се възприемат като „припомняне“ според нуждите въз основа на потребителски действия, промени в базата данни или събития с таймера.

Функционално

Ние предпочитаме чисти функции, които нямат странични ефекти. Това води до логика, която е по-лесна за разбиране и дава на компилатора най-голяма свобода за оптимизация.

За разлика от Excel, приложенията по своята същност мутират състоянието, например приложенията имат бутони, които запазват промените в записа в база данни. Следователно някои функции имат странични ефекти, въпреки че ние ограничаваме това, доколкото е практично.

Композиция

Когато е възможно, добавената функционалност се съчетава добре със съществуващата функционалност. Мощните функции могат да се разложат на по-малки части, които могат да се използват по-лесно независимо.

Например, контролата Галерия няма отделно свойства Sort и Filter. Вместо това функциите Sort и Filter са съставени заедно в едно свойство Items. Потребителският интерфейс за изразяване на Sort и Filter поведението е наслоено върху Items с помощта на двупосочен редактор за това свойство.

Силни типове

Типовете за всички стойности са известни по време на компилиране. Това позволява ранното откриване на грешки и богати предложения по време на създаването.

Поддържат се полиморфни типове, но преди да могат да се използват, техният тип трябва да бъде прикрепен към статичен тип и този тип трябва да е известен по време на компилиране. Функциите IsType и AsType са предвидени за типове тестване и изпълнение.

Предпочитание за тип

Типовете са получени от тяхната употреба, без да бъдат декларирани. Например, задаването на променлива на число води до това, че типът на променливата се установява като число.

Конфликтното използване на типа води до грешка по време на компилация.

Чувствителни към езикова променлива десетични разделители

Някои региони по света използват точка (.) като десетичен разделител, докато други използват запетая (,). Това прави и Excel. Това обикновено не се прави в други езици за програмиране, които обикновено използват канонична точка (.) като десетичен разделител за всички потребители по света. За да бъдете възможно най-достъпни за производителите на всички нива, важно е, че 3,14 е десетично число за човек във Франция, който е използвал този синтаксис през целия си живот.

Изборът на десетичен разделител има каскадно въздействие върху разделителя на списъка, използван за аргументи на извикване на функция и верижния оператор.

Десетичен разделител на езика на автора Десетичен разделител на Power Fx Разделител на списък на Power Fx Верижен оператор на Power Fx
. (точка) . (точка) , (запетая) ; (точка и запетая)
, (запетая) , (запетая) ; (точка и запетая) ;; (двойна точка и запетая)

Повече информация: Глобална поддръжка

Не е обектно ориентиран

Excel не е обектно-ориентиран, както и Power Fx. Например, в някои езици дължината на низ се изразява като свойство на низа като "Hello World".length в JavaScript. Excel и Power Fx вместо това изразяват това като функция като Len( "Hello World" ).

Компонентите със свойства и методи са обектно-ориентирани и Power Fx лесно работи с тях. Но където е възможно, ние предпочитаме функционален подход.

Разширим

Производителите могат да създават своите компоненти и функции, като използват самия Power Fx. Разработчиците могат да създават своите компоненти и функции, като пишат JavaScript.

Удобен за разработчици

Въпреки че производителите са нашата основна цел, ние се опитваме да бъдем благоприятни за разработчиците, където е възможно. Ако това не противоречи на принципите на проектиране, описани по-рано, правим нещата по начин, който разработчикът ще оцени. Например Excel няма възможност за добавяне на коментари, така че използваме C-подобни редови и вградени коментари.

Езикова еволюция

Развиването на езици за програмиране е едновременно необходимо и сложно. Всеки - с право - се опасява, че дадена промяна, независимо колко добронамерена е тя, може да наруши съществуващия код и да наложи на потребителите да научат нов модел. Power Fx приема сериозно обратната съвместимост, но също така силно вярваме, че не винаги ще се справим правилно за първи път и ще научим колективно кое е най-доброто като общност. Трябва да се развиваме и Power Fx е проектирал подкрепа за езиковото развитие от самото начало.

Към всеки запазен документ на Power Fx е включен печат на езикова версия. Ако искаме да направим несъвместима промяна, ще напишем това, което наричаме „конвертор за обратно компилиране“, който автоматично пренаписва формулата следващия път, когато бъде редактиран. Ако промяната е нещо основно, за което трябва да обучим потребителя, ще покажем и съобщение с връзка към документите. Използвайки това съоръжение, все още можем да зареждаме приложения, създадени с версиите за преглед на Power Apps от преди много години, въпреки всички промени, настъпили оттогава.

Например въведохме ShowError функция за показване на банер за грешка с червен фон.

Показване на грешка.

Потребителите го харесаха, но също така ни поискаха начин да покажем банер за успех (зелен фон) или информационен банер (син фон). И така, измислихме по-обща Notify функция, която приема втори аргумент за вида на известието. Можехме просто да добавим Notify и да запазим ShowError, както беше, но вместо това заменихме ShowError с Notify. Премахнахме функция, която преди това беше в производство, и я заменихме с нещо друго. Тъй като щеше да има два начина да се направи едно и също нещо, това би предизвикало объркване, особено за нови потребители, и най-важното, това би добавило сложност. Никой не се оплака, всички оцениха промяната и след това преминаха към следващата си функция Уведомяване.

Ето как изглежда същото приложение, когато се зарежда в последната версия на Power Apps. От потребителя не се изисква действие, за да се осъществи тази трансформация, то се е случило автоматично при отваряне на приложението.

Функцията Notify замества ShowError.

С тази възможност Power Fx може да се развива по-бързо и по-агресивно от повечето езици за програмиране.

Няма неопределена стойност

Някои езици, като JavaScript, използват концепцията за неопределена стойност за неинициализирани променливи или липсващи свойства. За по-голяма простота избягвахме тази концепция. Екземплярите, които биха били недефинирани на други езици, се третират като грешка или като празна стойност. Например всички неинициализирани променливи започват с празна стойност. Всички типове данни могат да приемат стойността на празно.

Типове данни
Оператори и идентификатори
Таблици
Променливи
Императивна логика
Глобална подкрепа
Граматика на израза
Граматика на формулата YAML
Формули в приложения за платно