Visão geral do Microsoft Power Fx

O Power Fx é a linguagem de pouco código que será usada no Microsoft Power Platform. É uma linguagem de programação de uso geral, fortemente tipada, declarativa e funcional.

Power Fx é expresso em texto de fácil leitura. É uma linguagem de pouco código com a qual os criadores podem trabalhar diretamente em uma barra de fórmulas semelhante ao Excel ou uma janela de texto do Visual Studio Code. O "pouco" no pouco código é devido à natureza concisa e simples da linguagem, tornando as tarefas de programação comuns fáceis para criadores e desenvolvedores. Permite o espectro completo de desenvolvimento – desde "nenhum código" para aqueles que nunca programaram antes até "código profissional" para o profissional experiente –, sem dificuldades de aprendizagem ou reescrita, permitindo que diversas equipes colaborem e economizem tempo e reduzam despesas.

Nota

  • Microsoft Power Fx é o novo nome da linguagem de fórmula para aplicativos de tela no Power Apps. Esta visão geral e os artigos associados são um trabalho em andamento à medida que extraímos a linguagem de aplicativos de tela, a integramos a outros produtos do Microsoft Power Platform e a disponibilizamos como software livre. Para aprender mais sobre e experimentar a linguagem hoje mesmo, comece com Introdução às fórmulas em aplicativos de tela na documentação do Power Apps e inscreva-se na Avaliação gratuita do Power Apps.
  • Neste artigo, nos referimos a criadores quando descrevemos um recurso que pode ser usado em qualquer uma das extremidades do espectro de habilidades de programação. Referimo-nos ao usuário como um desenvolvedor se o recurso for mais avançado e provavelmente estiver além do escopo de um usuário comum do Excel.

O Power Fx vincula objetos com fórmulas declarativas semelhantes a planilhas. Por exemplo, pense na propriedade Visível de um controle da interface do usuário como uma célula em uma planilha do Excel, com uma fórmula associada que calcula seu valor com base nas propriedades de outros controles. A lógica da fórmula recalcula o valor automaticamente, semelhante ao que acontece em uma planilha, o que afeta a visibilidade do controle.

Além disso, o Power Fx oferece lógica imperativa quando necessário. As planilhas normalmente não têm botões que podem enviar alterações a um banco de dados, mas os aplicativos costumam ter. A mesma linguagem de expressão é usada para lógica declarativa e imperativa.

O Power Fx será disponibilizado como software de código aberto. Atualmente, ele está integrado a aplicativos de tela e estamos no processo de o extrair do Power Apps para uso em outros produtos da Microsoft Power Platform e como código aberto. Mais informações: Microsoft Power Fx no GitHub

Este artigo é uma visão geral da linguagem e seus princípios de design. Para saber mais sobre o Power Fx, consulte os seguintes artigos:

Pense na planilha

E se você pudesse criar um aplicativo com a mesma facilidade com que cria uma planilha no Excel?

E se você pudesse tirar proveito de seu conhecimento existente sobre planilhas?

Estas foram as perguntas que inspiraram a criação do Power Apps e Power Fx. Centenas de milhões de pessoas criam planilhas com o Excel todos os dias; vamos trazer a eles a criação de aplicativos que é fácil e usa conceitos do Excel que eles já conhecem. Ao separar o Power Fx do Power Apps, responderemos a essas perguntas para a criação de automação, agente virtual ou outros domínios.

Todas as linguagens de programação, incluindo o Power Fx, têm expressões: uma maneira de representar um cálculo sobre números, strings ou outros tipos de dados. Por exemplo, mass * acceleration na maioria das linguagens expressa a multiplicação de mass e acceleration. O resultado de uma expressão pode ser colocado em uma variável, usado como um argumento para um procedimento ou aninhado em uma expressão maior.

O Power Fx leva isso além. Uma expressão por si só não diz nada sobre o que está calculando. Cabe ao criador colocá-lo em uma variável ou passá-lo para uma função. No Power Fx, em vez de escrever apenas uma expressão sem significado específico, você escreve uma fórmula que liga a expressão a um identificador. Você escreve force = mass * acceleration como uma fórmula para calcular force. À medida que mass ou acceleration mudar, force será atualizado automaticamente para um novo valor. A expressão descreveu um cálculo, uma fórmula deu um nome a esse cálculo e usou-o como uma receita. É por isso que nos referimos ao Power Fx como uma linguagem de fórmulas.

Por exemplo, esta fórmula do Stack Overflow pesquisa uma cadeia de caracteres na ordem inversa. No Excel, é semelhante à imagem a seguir.

Pesquisa reversa

Captura de tela de uma barra de fórmulas no Excel com a fórmula: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) A célula A1 contém o texto "Hello, World! É um prazer conhecê-lo!" A célula A2 contém o texto "você!"

O Power Fx funciona com esta mesma fórmula, com as referências de célula substituídas por referências de propriedade de controle:

Pesquisa reversa do Power Fx.

Captura de tela de uma barra de fórmulas do Power Fx no Power Apps. A fórmula é =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) Na caixa de entrada abaixo da fórmula, o texto "Hello, World! É um prazer conhecê-lo!" aparece, letra por letra. Ao mesmo tempo, na caixa Rótulo, aparecem as letras da última palavra. Quando o texto completo aparece na caixa de entrada, a palavra "você!" aparece na caixa de Rótulo.

Conforme o valor do controle Input é alterado, o controle Label recalcula automaticamente a fórmula e mostra o novo valor. Não há manipuladores de evento OnChange aqui, como seria comum em outras linguagens.

Outro exemplo que usa uma fórmula para a cor de Fill da tela. Conforme os controles deslizantes que controlam Vermelho, Verde e Azul são alterados, a cor de fundo muda automaticamente conforme é recalculada.

Controle deslizante da cor.

Não há eventos OnChange para os controles deslizantes como seria comum em outras linguagens. Não há como definir explicitamente o valor da propriedade Fill. Se a cor não está funcionando como esperado, você precisa olhar para essa fórmula para entender por que ela não está funcionando. Você não precisa pesquisar no aplicativo para encontrar um trecho de código que defina a propriedade em um momento inesperado; não há elemento de tempo. Os valores corretos da fórmula são sempre mantidos.

Como os controles deslizantes são definidos como uma cor escura, os rótulos de Vermelho, Verde e Azul mudam para branco para compensar. Isso é feito por meio de uma fórmula simples na propriedade Color para cada controle de rótulo.

Controles deslizantes coloridos do Power Fx.

O que é ótimo nisso é que está isolado do que está acontecendo na cor de Fill: são dois cálculos totalmente diferentes. Em vez de grandes procedimentos monolíticos, a lógica do Power Fx é geralmente composto de várias fórmulas menores independentes. Isso as torna mais fáceis de entender e permite melhorias sem perturbar a lógica existente.

O Power Fx é uma linguagem declarativa, assim como o Excel. O criador define o comportamento que deseja, mas cabe ao sistema determinar e otimizar como e quando realizá-lo. Para tornar isso prático, a maior parte do trabalho é feita por meio de funções puras sem efeitos colaterais, tornando o Power Fx também uma linguagem funcional (novamente, assim como o Excel).

Sempre ativas

Um aspecto que define as planilhas é que elas estão sempre ativas e as alterações são refletidas instantaneamente. Não há modo de compilação ou execução em uma planilha. Quando uma fórmula é modificada ou um valor é inserido, a planilha é imediatamente recalculada para refletir as alterações. Quaisquer erros detectados são exibidos imediatamente e não interferem no restante da planilha.

A mesma coisa é implementada com o Power Fx. Um compilador incremental é usado para manter continuamente o programa em sincronia com os dados em que está operando. As alterações são propagadas automaticamente por meio do grafo do programa, afetando os resultados dos cálculos dependentes, o que pode direcionar propriedades em controles como cor ou posição. O compilador incremental também fornece uma rica experiência de edição de fórmula com IntelliSense, sugestões, preenchimento automático e verificação de tipo.

Na animação abaixo, o número do pedido é exibido em um controle de rótulo dependente do controle deslizante, embora haja dois erros nos rótulos abaixo dele. O aplicativo é muito dinâmico e interativo. A primeira tentativa de corrigir a fórmula inserindo .InvalidName resulta em uma linha vermelha imediata e um erro é exibido, como deveria, mas o aplicativo continua em execução.

Sempre ativas.

Quando .Employee é inserido, isso faz com que o painel Data adicione a tabela Employees, metadados para essa tabela são recuperados e sugestões para colunas são oferecidas imediatamente. Simplesmente passamos por um relacionamento de uma tabela para outra e o sistema fez os ajustes necessários às referências do aplicativo. A mesma coisa acontece ao adicionar um .Customer.

Após cada alteração, o controle deslizante continua com seu último valor e todas as variáveis retêm seu valor. Durante todo o tempo, o número do pedido continuou a ser exibido no rótulo superior como deveria. O aplicativo está ativo, processando dados reais o tempo todo. Podemos salvá-lo e deixá-lo e outros podem abri-lo e usá-lo como o Excel. Não há etapa de criação, nem compilação, há apenas uma etapa de publicação para determinar qual versão do aplicativo está pronta para os usuários.

Pouco código

O Power Fx descreve a lógica de negócios em fórmulas concisas, porém poderosas. A maior parte da lógica pode ser reduzida a uma única linha com bastante expressividade e controle para necessidades mais complexas. O objetivo é reduzir ao mínimo o número de conceitos que um criador precisa entender, de preferência, não mais que um usuário do Excel já saberia.

Por exemplo, para procurar o nome de um funcionário para um pedido, você escreve o Power Fx como mostrado na animação a seguir. Além dos conceitos do Excel, o único conceito adicionado usado aqui é a notação de ponto "." para fazer drill em uma estrutura de dados, neste caso, .Employee.'First Name'. A animação mostra o mapeamento entre as partes da fórmula do Power Fx e os conceitos que precisam ser explicitamente codificados no JavaScript equivalente.

JavaScript com pouco código.

Vamos analisar mais detalhadamente todos os itens que o Power Fx está executando para nós e a liberdade que ele tem para otimizar, pois a fórmula é declarativa:

  • Assíncrono: todas as operações de dados no Power Fx são assíncronas. O criador não precisa especificar isso, nem precisa sincronizar as operações após o término da chamada. O criador não precisa estar ciente desse conceito, nem precisa saber o que é uma promessa ou função lambda.

  • Local e remoto: o Power Fx usa a mesma sintaxe e funções para dados que estão na memória local e são remotos em um banco de dados ou serviço. O usuário não precisa pensar sobre essa distinção. O Power Fx delega automaticamente o que pode para o servidor a fim de processar filtros e classificações com mais eficiência.

  • Dados relacionais: Orders e Customers são duas tabelas diferentes, com um relacionamento muitos para um. A consulta OData requer um "$expand" com conhecimento da chave estrangeira, semelhante a um Join em SQL. A fórmula não tem nada disso; na verdade, as chaves do banco de dados são outro conceito que o criador não precisa saber. O criador pode usar a notação de ponto simples para acessar todo o gráfico de relacionamentos de um registro.

  • Projeção: ao escrever uma consulta, muitos desenvolvedores escrevem select * from table, que traz de volta todas as colunas de dados. O Power Fx analisa todas as colunas usadas em todo o aplicativo, mesmo nas dependências da fórmula. A projeção é otimizada automaticamente e, novamente, um fabricante não precisa saber o que "projeção" significa.

  • Recupere apenas o que for necessário: neste exemplo, a função LookUp implica em que apenas um registro deve ser recuperado e é tudo o que é retornado. Se mais registros forem solicitados usando a função Filter, para a qual milhares de registros podem se qualificar, apenas uma única página de dados é retornada por vez, na ordem de 100 registros por página. O usuário deve passar por uma galeria ou tabela de dados para ver mais dados, e eles serão automaticamente trazidos para ele. O fabricante pode raciocinar sobre grandes conjuntos de dados sem precisar pensar em limitar as solicitações de dados a blocos gerenciáveis.

  • Executa apenas quando necessário: definimos uma fórmula para a propriedade Text do controle de rótulo. Conforme a variável selecionada muda, LookUp é automaticamente recalculado e o rótulo é atualizado. O criador não precisou escrever um manipulador OnChange para Seleção e não precisou se lembrar de que esse rótulo depende dele. Essa é a programação declarativa, conforme discutido anteriormente; o criador especificou o que desejava no rótulo, não como ou quando deveria ser obtido. Se esse rótulo não estiver visível porque está em uma tela que não é visível, ou se sua propriedade Visible for falsa, poderemos adiar esse cálculo até que o rótulo esteja visível e eliminá-lo efetivamente se isso acontecer raramente.

  • Tradução de sintaxe do Excel: Excel é usado por muitos usuários, a maioria dos quais sabe que o E comercial (&) é usado para concatenação de cadeias de caracteres. O JavaScript usa um sinal de mais (+) e outras linguagens usam um ponto (.).

  • Nomes de exibição e localização: First Name é usado na fórmula do Power Fx enquanto nwind_firstname é usado no JavaScript equivalente. No Microsoft Dataverse e SharePoint, há um nome de exibição para colunas e tabelas, além de um nome lógico exclusivo. Os nomes de exibição costumam ser muito mais amigáveis ao usuário, como neste caso, mas têm outra qualidade importante: podem ser localizados. Se você tiver uma equipe multilíngue, cada membro da equipe poderá ver os nomes das tabelas e campos em seu próprio idioma. Em todos os casos de uso, o Power Fx garante que o nome lógico correto seja enviado ao banco de dados automaticamente.

Nenhum código

Você não precisa ler e escrever o Power Fx para começar a expressar a lógica. Existem muitas personalizações e lógicas que podem ser expressas por meio de opções simples e construtores de IU. Essas ferramentas sem código foram criadas para ler e escrever Power Fx para garantir que haja bastante espaço para alguém ir além, reconhecendo que as ferramentas sem código nunca oferecerão toda a expressividade da linguagem completa. Mesmo quando usado com criadores sem código, a barra de fórmulas é exibida a todo instante no Power Apps para educar o criador sobre o que está sendo feito em seu nome para que ele possa começar a aprender Power Fx.

Vamos conferir alguns exemplos. No Power Apps, o painel de propriedades fornece opções e botões sem código para as propriedades dos controles. Na prática, a maioria dos valores de propriedade é estática. Você pode usar o criador de cores para alterar a cor de fundo da Gallery. Observe que a barra de fórmulas reflete essa mudança, atualizando a fórmula para uma chamada a RGBA diferente. A qualquer momento, você pode ir para a barra de fórmulas e dar um passo adiante, neste exemplo, usando ColorFade para ajustar a cor. A propriedade de cor ainda aparece no painel de propriedades, mas um ícone fx aparece ao passar o mouse e você é direcionado para a barra de fórmulas. Isso funciona totalmente de duas maneiras: remover a chamada a ColorFade retorna a cor para algo que o painel de propriedades pode entender e você poderá usá-lo novamente para definir uma cor.

Cor sem código.

Veja um exemplo mais complicado. A galeria mostra uma lista de funcionários do Dataverse. O Dataverse fornece exibições sobre os dados da tabela. Podemos selecionar uma dessas exibições e a fórmula é alterada para usar a função Filter com esse nome de exibição. Os dois menus suspensos podem ser usados para marcar a tabela correta e exibir sem tocar na barra de fórmulas. Mas digamos que você queira ir além e adicionar uma classificação. Podemos fazer isso na barra de fórmulas e o painel de propriedades mostra novamente um ícone fx e direciona as modificações para a barra de fórmulas. E, novamente, se simplificarmos a fórmula para algo que o painel de propriedades possa ler e escrever, ela poderá ser usada novamente.

Classificação sem código.

Veja exemplos simples. Acreditamos que o Power Fx é uma ótima linguagem para descrever interações sem código. É concisa, poderosa e fácil de analisar, e fornece o espaço que é tão frequentemente necessário, com "nenhuma dificuldade" até pouco código.

Código profissional

Os criadores de pouco código às vezes constroem coisas que requerem a ajuda de um especialista ou são assumidos por um desenvolvedor profissional para manutenção e aprimoramento. Os profissionais também apreciam que o desenvolvimento que requer pouco código pode ser mais fácil, rápido e menos custoso que criar uma ferramenta profissional. Nem toda situação requer todo o poder do Visual Studio.

Os profissionais desejam usar ferramentas profissionais para serem mais produtivos. Fórmulas do Power Fx podem ser armazenadas em Arquivos de origem YAML, que são fáceis de editar com Visual Studio Code, Visual Studio, ou qualquer outro editor de texto e habilitam o Power Fx para ser colocado sob controle de origem com o GitHub, Azure DevOps, ou qualquer outro sistema de controle de código-fonte.

Código profissional do Visual Studio Code

Código profissional GitHub.

O Power Fx suporta componentes baseados em fórmulas para compartilhamento e reutilização. Anunciamos suporte para parâmetros de propriedades de componentes, permitindo a criação de funções puras definidas pelo usuário com mais melhorias a caminho.

Além disso, o Power Fx é ótimo para unir componentes e serviços criados por profissionais. Conectores prontos para uso fornecem acesso a centenas de fontes de dados e serviços Web, conectores personalizados permitem que o Power Fx fale com qualquer serviço web REST, e os componentes de código permitem que o Power Fx interaja com JavaScript totalmente personalizado na tela e na página.

Princípios de design

Simples

O Power Fx é projetado para atingir o público criador, cujos membros não foram treinados como desenvolvedores. Sempre que possível, usamos o conhecimento que esse público-alvo já conhece ou pode adquirir rapidamente. O número de conceitos necessários para ter sucesso é mínimo.

Ser simples também é bom para os desenvolvedores. Para o público-alvo de desenvolvedores, pretendemos ser uma linguagem que exige pouco código e reduza o tempo necessário para criar uma solução.

Consistência do Excel

A linguagem Microsoft Power Fx pega muita coisa emprestada da linguagem de fórmulas do Excel. Procuramos tirar proveito do conhecimento e da experiência do Excel de muitos criadores que também usam o Excel. Tipos, operadores e semânticas de função são o mais próximo possível do Excel.

Se o Excel não tiver uma resposta, examinaremos em seguida o SQL. Depois do Excel, o SQL é a próxima linguagem declarativa mais comumente usada e pode fornecer orientação sobre operações de dados e tipagem forte que o Excel não oferece.

Declarativo

O criador descreve o que eles querem que sua lógica faça, não exatamente como ou quando para fazer isso. Isso permite que o compilador otimize executando operações em paralelo, adiando o trabalho até que seja necessário e fazendo a pré-busca e reutilização de dados armazenados em cache.

Por exemplo, em uma planilha do Excel, o autor define as relações entre as células, mas o Excel decide quando e em que ordem as fórmulas são avaliadas. Da mesma forma, as fórmulas em um aplicativo podem ser consideradas como "recalculantes" conforme necessário com base nas ações do usuário, alterações no banco de dados ou eventos de cronômetro.

Funcional

Preferimos funções puras que não tenham efeitos colaterais. Isso resulta em uma lógica mais fácil de entender e dá ao compilador mais liberdade para otimizar.

Ao contrário do Excel, os aplicativos, por natureza, mudam de estado, por exemplo, os aplicativos têm botões que salvam as alterações no registro em um banco de dados. Algumas funções, portanto, têm efeitos colaterais, embora os limitemos tanto quanto possível.

Composição

Sempre que possível, a funcionalidade adicionada combinará bem com a funcionalidade existente. Funções poderosas podem ser decompostas em partes menores que podem ser usadas de forma independente com mais facilidade.

Por exemplo, um controle Galeria não tem propriedades Sort e Filter separadas. Em vez disso, as funções Sort e Filter são compostas juntas em uma única propriedade Items. A interface do usuário para expressar o comportamento de Sort e Filter é colocada em camadas sobre a propriedade Items usando um editor bidirecional para essa propriedade.

Com tipo forte

Os tipos de todos os valores são conhecidos em tempo de compilação. Isso permite a detecção antecipada de erros e sugestões ricas durante a criação.

Os tipos polimórficos têm suporte, mas antes que possam ser usados, seu tipo deverá ser fixado a um tipo estático e esse tipo deverá ser conhecido em tempo de compilação. As funções IsType e AsType são fornecidas para tipos de teste e elenco.

Inferência de tipo

Os tipos são derivados de seu uso sem serem declarados. Por exemplo, definir uma variável como um número resulta no tipo da variável sendo estabelecido como um número.

O uso de tipo conflitante resulta em um erro de tempo de compilação.

Separadores decimais que diferenciam o local

Algumas regiões do mundo usam um ponto (.) como um separador decimal enquanto outros usam uma vírgula (,). É isso que o Excel também faz. Isso geralmente não é feito em outras linguagens de programação, que geralmente usam um ponto canônico (.) como separador decimal para todos os usuários em todo o mundo. Para ser o mais acessível possível para os criadores em todos os níveis, é importante que 3,14 seja um número decimal para uma pessoa na França que tenha usado essa sintaxe durante toda a vida.

A escolha do separador decimal tem um impacto em cascata no separador de lista, usado para argumentos de chamada de função e no operador de encadeamento.

Separador decimal do idioma do autor Separador decimal do Power Fx Separador de lista do Power Fx Operador de encadeamento do Power Fx
. (ponto) . (ponto) , (vírgula) ; (ponto e vírgula)
, (vírgula) , (vírgula) ; (ponto e vírgula) ;; (ponto e vírgula duplo)

Mais Informações: Suporte global

Não orientado a objetos

O Excel não é baseado em objetos, nem o Power Fx. Por exemplo, em algumas linguagens, o comprimento de uma cadeia de caracteres é expresso como uma propriedade da cadeia de caracteres, como "Hello World".length no JavaScript. Em vez disso, o Excel e Power Fx expressam isso em termos de uma função como Len( "Hello World" ).

Os componentes com propriedades e métodos são baseados em objetos e o Power Fx trabalha facilmente com eles. Mas, sempre que possível, preferimos uma abordagem funcional.

Extensível

Os fabricantes podem criar seus componentes e funções usando o Power Fx em si. Os desenvolvedores podem criar seus componentes e funções escrevendo JavaScript.

Fácil para o desenvolvedor

Embora os criadores sejam nosso principal alvo, tentamos oferecer ao desenvolvedor recursos fáceis de usar sempre que possível. Se não entrar em conflito com os princípios de design descritos anteriormente, fazemos as coisas de uma forma que um desenvolvedor apreciará. Por exemplo, o Excel não tem capacidade para adicionar comentários, então usamos a linha C e comentários embutidos.

Evolução da linguagem

A evolução das linguagens de programação é necessária e complicada. Todos, legitimamente, estão preocupados com o fato de que uma mudança, não importa o quão bem-intencionada seja, pode interromper o código existente e exigir que os usuários aprendam um novo padrão. O Power Fx leva a sério a compatibilidade com versões anteriores, mas também acreditamos fortemente que nem sempre acertaremos na primeira vez e aprenderemos coletivamente o que é melhor como comunidade. Devemos evoluir, e o Power Fx sempre projetou suporte para a evolução da linguagem.

Um carimbo de versão do idioma está incluído em cada documento do Power Fx que foi salvo. Se quisermos fazer uma alteração incompatível, escreveremos o que chamamos de "conversor de compatibilidade com versões anteriores", que reescreve a fórmula automaticamente na próxima vez em que for editada. Se a mudança for algo importante sobre o qual precisamos educar o usuário, também exibiremos uma mensagem com um link para os documentos. Usando esse recurso, ainda podemos carregar aplicativos que foram criados com as versões de visualização do Power Apps de muitos anos atrás, apesar de todas as mudanças que ocorreram desde então.

Por exemplo, introduzimos a função ShowError para exibir um banner de erro com um fundo vermelho.

Mostrar erro.

Os usuários adoraram, mas também nos pediram uma forma de mostrar um banner de sucesso (fundo verde) ou um banner informativo (fundo azul). Então, criamos uma função Notify mais genérica que leva um segundo argumento para o tipo de notificação. Poderíamos ter apenas adicionado Notify e mantido ShowError do jeito que era, mas em vez disso substituímos ShowError por Notify. Removemos uma função que anteriormente estava em produção e a substituímos por outra. Porque se houvesse duas maneiras de fazer a mesma coisa, isso teria causado confusão, principalmente para novos usuários, e, o mais importante, teria adicionado complexidade. Ninguém reclamou, todos gostaram da mudança e passaram para o próximo recurso Notify.

Esta é a aparência do mesmo aplicativo quando carregado na versão mais recente do Power Apps. Nenhuma ação foi exigida do usuário para fazer essa transformação acontecer, ela ocorreu automaticamente quando o aplicativo foi aberto.

A função Notify substitui ShowError.

Com esta facilidade, o Power Fx pode evoluir mais rápido e mais agressivamente do que a maioria das linguagens de programação.

Sem valor indefinido

Algumas linguagens, como o JavaScript, usam o conceito de um valor indefinido para variáveis não inicializadas ou propriedades ausentes. Para simplificar, evitamos esse conceito. As instâncias que seriam indefinidas em outras linguagens são tratadas como um erro ou um valor em branco. Por exemplo, todas as variáveis não inicializadas começam com um valor em branco. Todos os tipos de dados podem assumir o valor de branco.

Tipos de dados
Operadores e identificadores
Tabelas
Variáveis
Lógica imperativa
Suporte global
Gramática de expressão
Gramática de fórmula YAML
Fórmulas nos aplicativos de tela