Partajați prin


Prezentare generală Microsoft Power Fx

Power Fx este limbajul cu cod redus care va fi folosit în Microsoft Power Platform. Este un limbaj de programare cu scop general, puternic, declarativ și funcțional.

Power Fx este exprimat într-un text prietenos. Este un limbaj cu conținut redus de cod, cu care producătorii pot lucra direct într-o bară de formule de tip Excel sau fereastra de text Visual Studio Code. „Redus” din conțiunutul redus de cod se datorează naturii concise și simple a limbajului, ceea ce face ca actvitățile comune de programare să fie ușoare atât pentru producători, cât și pentru dezvoltatori. Permite întregul spectru de dezvoltare de la „fără cod” pentru cei care nu s-au programat până acum până la „cod pro” pentru profesionistul experimentat, fără învățare sau rescriere de cod între timp, permițând echipelor diverse să colaboreze și să economisească timp și cheltuieli.

Notă

  • Microsoft Power Fx este noul nume pentru limbajul formulelor pentru aplicații pânză in Power Apps. Această prezentare generală și articolele asociate sunt o lucrare în curs de desfășurare, deoarece extragem limba din aplicațiile pânză, o integrăm cu alte produse Microsoft Power Platform și le punem la dispoziție ca open source. Pentru a afla mai multe despre limbaj și pentru a-l experimenta astăzi, începeți cu Începeți cu formule în aplicații pânză din documentația Power Apps și înscrieți-vă pentru o versiune de Power Apps încercare gratuită.
  • În acest articol, ne referim la producători atunci când descriem o caracteristică care ar putea fi utilizată la fiecare capăt al spectrului abilităților de programare. Ne referim la utilizator ca un dezvoltator dacă caracteristica este mai avansată și este probabil dincolo de domeniulde aplicare al unui utilizator tipic Excel.

Power Fx leagă obiectele împreună cu formule declarative de tip foaie de calcul. De exemplu, gândiți-vă la proprietatea Vizibil a unui control UI ca celulă într-o foaie de lucru Excel, cu o formulă asociată care calculează valoarea acestuia pe baza proprietăților altor controale. Logica formulelor recalculează automat valoarea, similar cu modul în care o face o foaie de calcul, ceea ce afectează vizibilitatea controlului.

De asemenea, Power Fx oferă o logică imperativă atunci când este necesar. Foile de lucru nu au de obicei butoane care pot trimite modificări la o bază de date, dar aplicațiile adesea au. Același limbaj de expresie este folosit atât pentru logica declarativă, cât și pentru logica imperativă.

Power Fx va fi disponibil ca software open source. Este în prezent integrat în aplicații canvas și suntem în proces de extragere din Power Apps pentru a fi utilizat în alte produse Microsoft Power Platform și ca open source. Informații suplimentare: Microsoft Power Fx pe GitHub

Acest articol este o prezentare generală a limbajului și a principiilor sale de proiectare. Pentru a afla mai multe despre Power Fx, consultați următoarele articole:

Gândiți-vă la foaie de calcul

Cumar fi dacă ați putea crea o aplicație la fel de ușor cum creeați o foaie de lucru în Excel?

Cum ar fi dacă ați putea profita de cunoștințele dvs. existente despre foaia de calcul?

Acestea au fost întrebările care au inspirat crearea Power Apps și Power Fx. Sute de milioane de oameni creează fișe de lucru cu Excel în fiecare zi; să le aducem crearea de aplicații ușor și utilizează concepte Excel pe care le știu deja. Prin eliminarea Power Fx din Power Apps, vom răspunde la aceste întrebări pentru automatizarea construcțiilor sau pentru un agent virtual sau pentru alte domenii.

Toate limbajele de programare, inclusiv Power Fx, au expresii: o modalitate de a reprezenta un calcul pe numere, șiruri sau alte tipuri de date. De exemplu, mass * acceleration în majoritatea limbilor exprimă multiplicarea de mass și acceleration. Rezultatul unei expresii poate fi plasat într-o variabilă, folosit ca argument pentru o procedură sau cuibărit într-o expresie mai mare.

Power Fx face acest lucru cu un pas înainte. O expresie în sine nu spune nimic despre ceea ce calculează. Depinde de producător să o plaseze într-o variabilă sau să o transmită unei funcții. În Power Fx, în loc să scrieți doar o expresie care nu are un sens specific, scrieți o formulă care leagă expresia de un identificator. Scrieți force = mass * acceleration ca formulă pentru a calcula force. Pe măsură ce mass sau acceleration se modifică, force este actualizată automat la o nouă valoare. Expresia a descris un calcul, o formulă a dat acelui calcul un nume și l-a folosit ca rețetă. Acesta este motivul pentru care ne referim la Power Fx ca la un limbaj de formule.

De exemplu, această formulă din Stack Overflow caută un șir în ordine inversă. În Excel, arată ca următoarea imagine.

Căutare inversă

Captură de ecran a unei bare de formule din Excel cu formula: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) Celula A1 conține textul „Salut, lume! Mă bucur să te cunosc!" Celula A2 conține textul "tu!"

Power Fx funcționează cu aceeași formulă, cu referințele de celule înlocuite cu referințe de proprietăți de control:

Power Fx căutare inversă.

Captură de ecran a unei bare de formule Power Fx în Power Apps. Formula este =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) În caseta de intrare de sub formulă, textul „Salut, lume! Mă bucur să te cunosc!” apare, literă cu literă. În același timp, în caseta Etichetă, apar literele ultimului cuvânt. Când textul complet apare în caseta de introducere, cuvântul „tu!” apare în caseta Etichetă.

Pe măsură ce valoarea de control Input este modificată, controlul Label recalculează automat formula și afișează noua valoare. Nu există manipulatori de evenimente OnChange, aici așa cum ar fi obișnuit în alte limbi.

Un alt exemplu care folosește o formulă pentru culoarea ecranului Fill. Pe măsură ce glisoarele care controlează roșu, verde și albastru sunt schimbate, culoarea de fundal se schimbă automat pe măsură ce este recalculată.

Glisor de culoare.

Nu există evenimente OnChange pentru controalele glisante, așa cum ar fi obișnuit în alte limbi. Nu există nicio modalitate de a seta în mod explicit valoarea proprietății Fill. Dacă culoarea nu funcționează conform așteptărilor, trebuie să vă uitați la această formulă pentru a înțelege de ce nu funcționează. Nu este nevoie să căutați prin aplicație pentru a găsi o bucată de cod care setează proprietatea la un moment neașteptat; nu există element de timp. Valorile formulei corecte sunt întotdeauna menținute.

Deoarece glisoarele sunt setate la o culoare închisă, etichetele pentru Roșu, Verde și Albastru se schimbă în alb pentru a compensa. Acest lucru se face printr-o formulă simplă pe proprietatea Color pentru fiecare control al etichetei.

Power Fx glisoare de culoare.

Ce este grozav la acest lucru este că este izolat de ceea ce se întâmplă pentru culoarea Fill: acestea sunt două calcule complet diferite. În loc de proceduri monolitice mari, logica Power Fx este formată de obicei din multe formule mai mici, care sunt independente. Acest lucru le face mai ușor de înțeles și permite îmbunătățiri fără a deranja logica existentă.

Power Fx este un limbaj declarativ, la fel ca Excel. Producătorul definește ce comportament doresc, dar este de competența sistemului să determine și să optimizeze cum și când să-l realizeze. Pentru a face acest lucru practic, cea mai mare parte a lucrărilor se face prin funcții pure, fără efecte secundare, făcând din Power Fx și un limbaj funcțional (din nou, la fel ca Excel).

Mereu live

Un aspect definitoriu al foilor de lucru este că sunt întotdeauna live, iar schimbările se reflectă instantaneu. Nu există nici un mod de compilare sau rulare într-o foaie de lucru. Când se modifică o formulă sau se introduce o valoare, foaia de lucru este imediat recalculată pentru a reflecta modificările. Orice erori detectate sunt afișate imediat și nu interferează cu restul foii de lucru.

Același lucru este implementat și cu Power Fx. Un compilator incremental este utilizat pentru a menține continuu programul sincronizat cu datele pe care operează. Modificările sunt propagate automat prin graficul programului, afectând rezultatele calculelor dependente, care ar putea conduce la proprietăți pe controale precum culoarea sau poziția. Compilatorul incremental oferă, de asemenea, o bogată experiență de editare a formulelor cu IntelliSense, sugestii, completare automată și verificarea scrierii.

În animația de mai jos, numărul comenzii este afișat într-un control de etichete dependent de controlul glisor, chiar dacă există două erori pe etichetele de sub acesta. Aplicația este foarte vie și interactivă. Prima încercare de a remedia formula prin a introduce .InvalidName rezultă o linie roșie imediată și se afișează erori, așa cum ar trebui, dar aplicația continuă să ruleze.

Traieste mereu.

Când este introdus .Employee, acest lucru provoacă panoul Data să adauge tabelul Angajați, se recuperează metadatele pentru acest tabel și sunt oferite imediat sugestii pentru coloane. Tocmai am parcurs o relație de la un tabel la altul, iar sistemul a făcut ajustările necesare referințelor aplicației. Același lucru se întâmplă atunci când se adaugă un .Customer.

După fiecare modificare, glisorul continuă cu ultima sa valoare și orice variabilă își păstrează valoarea. De-a lungul timpului, numărul comenzii a continuat să fie afișat în eticheta superioară așa cum ar trebui. Aplicația a fost live, procesând date reale, tot timpul. Îl putem salva, pleca, iar alții îl pot deschide și folosi la fel ca Excel. Nu există nici un pas de compilare, nici o compilare, există doar un pas de publicare pentru a determina ce versiune a aplicației este pregătită pentru utilizatori.

Conținut scăzut de cod

Power Fx descrie logica de afaceri în formule concise, dar puternice. Majoritatea logicii poate fi redusă la o singură linie, cu multă expresivitate și control pentru nevoi mai complexe. Scopul este de a menține un număr minim de concepte pe care un producător trebuie să le înțeleagă – în mod ideal, nu mai mult decât ar ști deja un utilizator Excel.

De exemplu, pentru a căuta prenumele unui angajat pentru o comandă, scrieți Power Fx așa cum se arată în animația următoare. Dincolo de conceptele Excel, singurul concept adăugat utilizat aici este notația punct „.” pentru forarea într-o structură de date, în acest caz .Employee.'First Name'. Animația arată maparea între părțile formulei Power Fx și conceptele care trebuie codificate explicit în JavaScript echivalent.

Cu cod redus JavaScript.

Să analizăm mai în profunzime toate lucrurile pe care Power Fx le face pentru noi și libertatea de optimizare pe care o are, deoarece formula a fost declarativă:

  • Asincron: toate operațiunile de date din Power Fx sunt asincrone. Producătorul nu trebuie să specifice acest lucru și nici producătorul nu trebuie să sincronizeze operațiunile după terminarea apelului. Producătorul nu trebuie să fie deloc conștient de acest concept, nu trebuie să știe ce este o promisiune sau o funcție lambda.

  • Local și la distanță: Power Fx folosește aceeași sintaxă și funcții pentru datele care sunt locale în memorie și conectează de la distanță o bază de date sau un serviciu. Utilizatorul nu trebuie să se gândească la această distincție. Power Fx deleagă automat ce poate serverului, pentru a procesa filtrele și le sortează mai eficient acolo.

  • Date relaționale: Comenzile și Clienții sunt două tabele diferite, cu o relație multi-la-unu. Interogarea OData necesită un „$expand” cu cunoștințe despre cheia străină, similar cu un Join în SQL. Formula nu are nimic din toate acestea, de fapt, cheile bazei de date sunt un alt concept despre care producătorul nu trebuie să știe. Producătorul poate utiliza notația punctului simplu pentru a accesa întregul grafic al relațiilor dintr-o înregistrare.

  • Proiecție: când scriu o interogare, mulți dezvoltatori scriu select * from table, ceea ce aduce înapoi toate coloanele de date. Power Fx analizează toate coloanele care sunt utilizate în întreaga aplicație, chiar și în dependențe de formulă. Proiecția este optimizată automat și, din nou, un producător nu trebuie să știe ce înseamnă „proiecție”.

  • Preluați doar ceea ce este necesar: în acest exemplu, funcția LookUp implica faptul că ar trebui să fie preluată o singură înregistrare și asta este tot ce este returnat. Dacă sunt solicitate mai multe înregistrări folosind funcția Filter– pentru care s-ar putea califica mii de înregistrări – numai o singură pagină de date este returnată odată, pe comanda de 100 de înregistrări pe pagină. Utilizatorul trebuie să facă gesturi printr-o galerie sau un tabel de date pentru a vedea mai multe date și va fi adus automat pentru ei. Producătorul poate argumenta despre seturi mari de date fără a fi nevoie să se gândească la limitarea cererilor de date la bucăți gestionabile.

  • Se rulează numai când este necesar: am definit o formulă pentru Text proprietatea controlului etichetă. Pe măsură ce variabila selectată se modifică, LookUp este recalculat automat și eticheta este actualizată. Producătorul nu a trebuit să scrie un handler OnChange pentru Selection și nu a trebuit să-și amintească că această etichetă depinde de ea. Aceasta este o programare declarativă, așa cum am discutat anterior: producătorul a specificat ce doreau să aibă în etichetă, nu cum sau când ar trebui să fie preluat. Dacă această etichetă nu este vizibilă, deoarece este pe un ecran care nu este vizibil sau proprietatea sa Visible este falsă, putem amâna acest calcul până când eticheta este vizibilă și o putem elimina în mod eficient dacă acest lucru se întâmplă rar.

  • Traducerea sintaxei Excel: Excel este folosit de mulți utilizatori, dintre care cei mai mulți știu că ampersand (&) este folosit pentru concatenarea șirurilor. JavaScript folosește un semn plus (+), iar alte limbi folosesc un punct (.).

  • Nume afișate și localizare: First Name este folosit în formula Power Fx în timp ce nwind_firstname este folosit în echivalentul JavaScript. În Microsoft Dataverse și SharePoint, există un nume afișat pentru coloane și tabele, pe lângă un nume logic unic. Numele afișate sunt adesea mult mai ușor de utilizat, ca în acest caz, dar au o altă calitate importantă prin faptul că pot fi localizate. Dacă aveți o echipă multilingvă, fiecare membru al echipei poate vedea numele tabelelor și câmpurilor în propria lor limbă. În toate cazurile de utilizare, Power Fx se asigură că numele logic corect este trimis automat la baza de date.

Fără cod

Nu trebuie să citiți și să scrieți Power Fx pentru a începe să exprimați logica. Există o mulțime de personalizări și logică care pot fi exprimate prin comutatoare simple și constructori de interfețe. Aceste instrumente fără cod au fost construite pentru a citi și scrie Power Fx pentru a se asigura că există suficient spațiu pentru ca cineva să o ducă mai departe, recunoscând în același timp că instrumentele fără cod nu vor oferi niciodată expresivitatea limbajului complet. Chiar și atunci când este utilizată cu constructori fără cod, bara de formule este în față și în centru în Power Apps pentru a educa creatorul despre ceea ce se face în numele lor, astfel încât să poată începe să învețe Power Fx.

Să aruncăm o privire la câteva exemple. În Power Apps, panoul de proprietăți oferă comutatoare și butoane fără cod pentru proprietățile comenzilor. În practică, majoritatea valorilor proprietăților sunt statice. Puteți utiliza generatorul de culori pentru a schimba culoarea de fundal a Gallery. Observați că bara de formule reflectă această modificare, actualizând formula la un alt apel RGBA. În orice moment, puteți merge la bara de formule și puteți face acest lucru cu un pas mai departe – în acest exemplu, folosind ColorFade pentru a ajusta culoarea. Proprietatea de culoare apare în continuare în panoul de proprietăți, dar o pictogramă fx apare pe cursor și sunteți direcționat către bara de formule. Acest lucru funcționează pe deplin în două moduri: eliminarea apelului ColorFade returnează culoarea la ceva ce panoul de proprietăți poate înțelege și îl puteți folosi din nou pentru a seta o culoare.

Culoare fără cod.

Iată un exemplu mai complicat. Galeria arată o listă de angajați din Dataverse. Dataverse furnizează vizualizări asupra datelor din tabel. Putem selecta una dintre aceste vizualizări și formula este modificată pentru a utiliza funcția Filter cu acest nume de vizualizare. Cele două meniuri derulante pot fi utilizate pentru a forma în tabelul corect și a vizualiza fără a atinge bara de formule. Dar să presupunem că doriți să mergeți mai departe și să adăugați o sortare. Putem face acest lucru în bara de formule și panoul de proprietăți arată din nou o pictogramă fx și direcționează modificări la bara de formule. Și din nou, dacă simplificăm formula la ceva ce panoul de proprietăți poate citi și scrie, poate fi folosit din nou.

Sortare fără cod.

Acestea au fost exemple simple. Credem că Power Fx este un limbaj excelent pentru a descrie interacțiunile fără cod. Este concis, puternic și ușor de analizat și oferă spațiul necesar atât de des cu „no cliffs” până la cod redus.

Cod pro

Producătorii de coduri joase construiesc uneori lucruri care necesită ajutorul unui expert sau sunt preluate de un dezvoltator profesionist pentru a le menține și îmbunătăți. Profesioniștii apreciază, de asemenea, că dezvoltarea de conținut redus de cod poate fi mai ușoară, mai rapidă și mai puțin costisitoare decât crearea unui instrument profesional. Nu orice situație necesită întreaga putere a Visual Studio.

Profesioniștii doresc să folosească instrumente profesionale pentru a fi cei mai productivi. Formulele Power Fx pot fi stocate în Fișiere sursă YAML, care sunt ușor de editat cu Visual Studio Code, Visual Studio sau orice alt editor de text și permiteți ca Power Fx să fie pus sub control sursă cu GitHub, Azure DevOps sau orice alt sistem de control al codului sursă.

Cod pro Visual Studio Cod.

Cod pro GitHub.

Power Fx acceptă componente bazate pe formule pentru partajare și reutilizare. Am anunțat asistență pentru parametrii proprietăților componentelor, permițând crearea de funcții definite pur de utilizator, cu mai multe îmbunătățiri pe parcurs.

De asemenea, Power Fx este excelent pentru îmbinarea componentelor și serviciilor create de profesioniști. Conectorii predefiniți oferă acces la sute de surse de date și servicii web, conectorii personalizați permit ca Power Fx să vorbească cu orice serviciu web REST, iar componentele de cod permit ca Power Fx să interacționeze cu JavaScript complet personalizat pe ecran și pe pagină.

Principii de proiectare

Simplu

Power Fx este conceput pentru a viza publicul producătorului, ai cărui membri nu au fost instruiți ca dezvoltatori. Ori de câte ori este posibil, folosim cunoștințele pe care acest public le-ar ști deja sau pe care le pot învăța rapid. Numărul de concepte necesare pentru a avea succes este redus la minimum.

Simplitatea este, de asemenea, bună pentru dezvoltatori. Pentru publicul dezvoltator, ne propunem să fim un limbaj cu conținut redus de cod, care reduce timpul necesar pentru a construi o soluție.

Consecvență în Excel

Limbajul Microsoft Power Fx împrumută mult din limba formulă Excel. Căutăm să profităm de cunoștințele și experiența Excel de la mulți producători care folosesc și Excel. Tipurile, operatorii și semantica funcțională sunt cât mai aproape de Excel.

Dacă Excel nu are un răspuns, ne uităm la SQL. După Excel, SQL este următorul limbaj declarativ cel mai frecvent utilizat și poate oferi îndrumări privind operațiunile de date și tastarea puternică pe care Excel nu o face.

Declarativ

Producătorul descrie ce vor ca logica lor să o facă, nu exact cum sau când să o facă. Acest lucru permite compilatorului să optimizeze efectuând operațiuni în paralel, amânând lucrările până când este necesar și pre-preluând și refolosind datele memorate în cache.

De exemplu, într-o foaie de lucru Excel, autorul definește relațiile dintre celule, dar Excel decide când și în ce ordine sunt evaluate formulele. În mod similar, formulele dintr-o aplicație pot fi considerate ca fiind „recalcularea”, după cum este necesar, pe baza acțiunilor utilizatorilor, a modificărilor bazei de date sau a evenimentelor de temporizare.

Funcțional

Favorizăm funcțiile pure care nu au efecte secundare. Acest lucru are ca rezultat o logică mai ușor de înțeles și oferă compilatorului cea mai mare libertate de optimizare.

Spre deosebire de Excel, aplicațiile prin natura lor mută starea – de exemplu, aplicațiile au butoane care salvează modificările înregistrării într-o bază de date. Prin urmare, unele funcții au efecte secundare, deși limităm acest lucru atât cât este practic.

Compoziție

Unde este posibil, funcționalitatea adăugată se compune bine cu funcționalitatea existentă. Funcțiile puternice pot fi descompuse în părți mai mici, care pot fi utilizate mai ușor independent.

De exemplu, un control de Galerie nu are proprietăți Sort și Filter separate. În schimb, funcțiile Sort și Filter sunt compuse împreună într-o singură proprietate Items. UI pentru exprimarea comportamentului Sort și Filter este stratificat deasupra proprietății Items utilizând un editor bidirecțional pentru această proprietate.

Tastat puternic

Tipurile tuturor valorilor sunt cunoscute în momentul compilării. Acest lucru permite detectarea timpurie a erorilor și a sugestiilor bogate în timpul autorului.

Tipurile polimorfe sunt acceptate, dar înainte de a putea fi utilizate, tipul lor trebuie fixat pe un tip static și acel tip trebuie cunoscut la momentul compilării. Funcțiile IsType și AsType sunt furnizate pentru tipurile de testare și repartizare.

Tip de inferență

Tipurile sunt derivate din utilizarea lor fără a fi declarate. De exemplu, setarea unei variabile la un număr duce la stabilirea tipului variabilei ca număr.

Utilizarea tipului conflictual are ca rezultat o eroare în timpul compilării.

Separatoare zecimale sensibile la localizare

Unele regiuni ale lumii folosesc un punct (.) ca separator zecimal, în timp ce alții folosesc o virgulă (,). Asta face și Excel. Acest lucru nu se face de obicei în alte limbaje de programare, care utilizează în general un punct canonic (.) ca separator zecimal pentru toți utilizatorii din întreaga lume. Pentru a fi cât mai accesibil posibil pentru factorii de decizie de la toate nivelurile, este important ca 3,14 este un număr zecimal pentru o persoană din Franța care a folosit această sintaxă toată viața.

Alegerea separatorului zecimal are un impact în cascadă asupra separatorului de listă, utilizat pentru argumentele apelului funcției și a operatorului de înlănțuire.

Separator zecimal al limbii autorului Separator zecimal Power Fx Separator de listă Power Fx Operator de înlănțuire Power Fx
. (punct) . (punct) , (virgulă) ; (punct virgulă)
, (virgulă) , (virgulă) ; (punct virgulă) ;; (punct virgulă dublu)

Mai multe informații: Asistență globală

Nu este orientat pe obiect

Excel nu este orientat pe obiecte și nici Power Fx. De exemplu, în unele limbi, lungimea unui șir este exprimată ca o proprietate a șirului, cum ar fi "Hello World".length în JavaScript. Excel și Power Fx exprimă în schimb acest lucru în termenii unei funcții, ca Len( "Hello World" ).

Componentele cu proprietăți și metode sunt orientate pe obiecte și Power Fx funcționează ușor cu ele. Dar acolo unde este posibil, preferăm o abordare funcțională.

Extensibil

Creatorii își pot crea componentele și funcțiile utilizând Power Fx în sine. Dezvoltatorii își pot crea componentele și funcțiile scriind JavaScript.

Compatibil cu dezvoltatorii

Deși factorii de decizie sunt obiectivul nostru principal, încercăm să fim prietenoși cu dezvoltatorii ori de câte ori este posibil. Dacă nu intră în conflict cu principiile de proiectare descrise anterior, facem lucrurile într-un mod pe care un dezvoltator îl va aprecia. De exemplu, Excel nu are capacitatea de a adăuga comentarii, așa că folosim comentarii de tip C și linie.

Evoluția limbii

Evoluția limbajelor de programare este atât necesară, cât și complicată. Toata lumea – pe bună dreptate – își exprimă îngrijorarea cu privire la faptul că o schimbare, oricât de bine intenționată ar fi, poate întrerupe codul existent și poate impune utilizatorilor să învețe un nou model. Power Fx ia în serios compatibilitatea inversă, dar credem că nu vom reuşi întotdeauna de prima dată şi vom învăţa împreună ce este mai bine ca comunitate. Trebuie să evoluăm, iar Power Fx a conceput suportul pentru evoluția limbajului de la bun început.

O marcă a versiunii lingvistice este inclusă în fiecare document Power Fx salvat. Dacă dorim să facem o modificare incompatibilă, vom scrie ceea ce numim un „convertor de compatibilitate înapoi” care rescrie formula automat data viitoare când este editată. Dacă schimbarea este ceva major despre care trebuie să educăm utilizatorul, vom afișa și un mesaj cu un link către documente. Folosind această facilitate, putem încărca în continuare aplicații care au fost create cu versiunile de previzualizare ale Power Apps de acum mulți ani, în ciuda tuturor schimbărilor care au avut loc de atunci.

De exemplu, am introdus funcția ShowError pentru a afișa un banner de eroare cu un fundal roșu.

Afișează eroarea.

Utilizatorilor le-a plăcut, dar ne-au cerut și o modalitate de a afișa un banner de succes (fundal verde) sau un banner informativ (fundal albastru). Deci, am venit cu o funcție Notify mai generică care ia un al doilea argument pentru tipul de notificare. Am fi putut adăuga Notify și păstra ShowError așa cum era, dar în schimb am înlocuit ShowError cu Notify. Am eliminat o funcție care fusese anterior în producție și am înlocuit-o cu altceva. Întrucât ar fi existat două modalități de a face același lucru, aceasta ar fi provocat confuzie – mai ales pentru utilizatorii noi – și, cel mai important, ar fi adăugat complexitate. Nimeni nu s-a plâns, toată lumea a apreciat schimbarea și apoi a trecut la următoarea funcție de Notificare.

Așa arată aceeași aplicație atunci când este încărcată în cea mai recentă versiune de Power Apps. Nu a fost necesară nicio acțiune de către utilizator pentru ca această transformare să aibă loc, ea a avut loc automat la deschiderea aplicației.

Funcția de notificare înlocuiește ShowError.

Cu această facilitate, Power Fx poate evolua mai rapid și mai agresiv decât majoritatea limbajelor de programare.

Nicio valoare nedefinită

Unele limbi, cum ar fi JavaScript, utilizează conceptul unei valori nedefinite pentru variabilele neinițializate sau proprietățile lipsă. Din simplitate, am evitat acest concept. Instanțele care ar fi nedefinite în alte limbi sunt tratate fie ca o eroare, fie ca o valoare necompletată. De exemplu, toate variabilele neinițializate încep cu o valoare necompletată. Toate tipurile de date pot lua valoarea golului.

Tipuri de date
Operatori și identificatori
Mesele
Variabile
Logica imperativă
Suport global
Gramatica expresiei
Gramatica formulei YAML
Formule în aplicațiile planșă de lucru