Partilhar via


Descrição geral do Microsoft Power Fx

O Power Fx é a linguagem que necessita de poucos conhecimentos de código que será utilizada em todo o Microsoft Power Platform. É uma linguagem de programação funcional de fins gerais, de tipo forte e declarativa.

O Power Fx é expresso em texto simples. Trata-se de uma linguagem de pouco código que os criadores podem fazer funcionar diretamente numa barra de fórmulas semelhante à do Excel ou numa janela de texto do Visual Studio Code. O termo "pouco" na expressão de pouco código significa que é uma linguagem de natureza concisa e simples, o que facilita as tarefas de programação comuns para criadores e programadores. Permite todo o espectro de programação de sem código para aqueles que nunca programaram antes para código pro para profissionais experientes, sem aprendizagem ou reescrita necessária pelo meio, permitindo que diversas equipas colaborem e poupem tempo e despesas.

Nota

  • O Microsoft Power Fx é o novo nome da linguagem de fórmulas para aplicações de tela no Power Apps. Esta descrição geral e os artigos associados são um trabalho em curso à medida que extraímos o idioma das aplicações de tela, o integramos com outros produtos do Microsoft Power Platform e o disponibilizamos como open source. Para mais informações sobre, e experimentar a linguagem hoje, comece com Introdução a fórmulas em aplicações de tela na documentação do Power Apps e inscreva-se para obter uma avaliação do Power Apps gratuita.
  • Neste artigo, referimo-nos a criadores quando descrevemos uma funcionalidade que pode ser utilizada em qualquer extremidade do espectro de competências de programação. Referimo-nos ao utilizador como programador se a funcionalidade for mais avançada e, provavelmente, fora do âmbito de um utilizador típico do Excel.

O Power Fx vincula objetos uns aos outros com fórmulas declarativas semelhantes a folhas de cálculo. Por exemplo, pense na propriedade Visível de um controlo de IU como uma célula numa folha de cálculo do Excel, com uma fórmula associada que calcula o seu valor com base nas propriedades de outros controlos. A lógica da fórmula recalcula o valor automaticamente, de forma semelhante a uma folha de cálculo, o que afeta a visibilidade do controlo.

Além disso, Power Fx oferece lógica imperativa quando necessário. Normalmente, as folhas de cálculo não têm botões capazes de submeter alterações a uma base de dados, mas as aplicações muitas vezes têm. A mesma linguagem de expressão é usada tanto para a lógica declarativa como para a lógica imperativa.

O Power Fx será disponibilizado como software open-source. Está atualmente integrado em aplicações de tela e estamos no processo de extraí-lo do Power Apps para utilização noutros produtos Microsoft Power Platform e como open-source. Mais informações: Microsoft Power Fx em GitHub

Este artigo é uma descrição geral da linguagem e dos seus princípios de design. Para mais informações sobre o Power Fx, consulte os seguintes artigos:

Pense em folha de cálculo

E se conseguisse criar uma aplicação tão facilmente quanto criar uma folha de cálculo no Excel?

E se conseguisse tirar partido dos seus conhecimentos atuais em folhas de cálculo?

Estas foram as perguntas que inspiraram a criação do Power Apps e do Power Fx. Centenas de milhões de pessoas criam folhas de cálculo com o Excel todos os dias. Vamos permitir-lhes criar aplicações facilmente e utilizar conceitos do Excel que já conhecem. Ao separar o Power Fx do Power Apps, iremos responder a estas perguntas para criar automatização, um agente virtual ou outros domínios.

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

O Power Fx leva isto um passo mais adiante. Uma expressão, por si só, não diz nada sobre o que está a calcular. Cabe ao criador colocá-la numa variável ou transmiti-la para uma função. No Power Fx, em vez de escrever apenas uma expressão que não tem um significado específico, escreve uma fórmula que vincula a expressão a um identificador. Escreva force = mass * acceleration como fórmula para calcular force. À medida que mass ou acceleration são alterados, force é atualizado automaticamente para um novo valor. A expressão descrevia um cálculo, uma fórmula deu a esse cálculo um nome e utilizou-o como receita. É por este motivo que nos referimos ao Power Fx como uma linguagem de fórmulas.

Por exemplo, esta fórmula do Stack Overflow procura uma cadeia em ordem inversa. No Excel, parece a seguinte imagem.

Pesquisa inversa

Captura de ecrã de uma barra de fórmulas no Excel com a fórmula: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))), em que a Célula A1 contém o texto "Hello, World! Prazer em conhecê-lo!" A Célula A2 contém o texto "conhecê-lo!"

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

Pesquisa inversa do Power Fx.

Captura de ecrã 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, aparece o texto "Hello, World! Prazer em conhecê-lo!", aparece, letra por letra. Ao mesmo tempo, na caixa Etiqueta, aparecem as letras da última palavra. Quando aparece o texto completo na caixa de entrada, aparece a palavra "conhecê-lo!" na caixa Etiqueta.

À medida que o valor de controlo Input muda, o controlo Label recalcula automaticamente a fórmula e mostra o novo valor. Não há processadores de evento OnChange aqui, como seria comum noutras linguagens.

Outro exemplo que usa uma fórmula para a cor Fill do ecrã. À medida que os controlos de deslize que controlam Vermelho, Verde e Azul são alterados, a cor de fundo muda automaticamente à medida que está a ser recalculada.

Controlo de deslize de cor.

Não existem eventos OnChange para os controlos de deslize como seria comum noutras linguagens. Não existe uma forma de definir explicitamente o valor da propriedade Fill. Se a cor não estiver a funcionar conforme esperado, terá de olhar para esta fórmula para compreender por que motivo não está a funcionar. Não é necessário procurar na aplicação para localizar um fragmento de código que define a propriedade num momento inesperado; não existe um elemento de tempo. Os valores corretos da fórmula são sempre mantidos.

À medida que os controlos de deslize são definidos para uma cor escura, as etiquetas para Vermelho, Verde e Azul mudam para branco para compensar. Isto é feito através de uma fórmula simples na propriedade Color para cada controlo de etiqueta.

Controlos de deslize do Power Fx.

Isto é muito útil porque está isolado do que está a acontecer para a cor Fill: estes são dois cálculos totalmente diferentes. Em vez de procedimentos monolíticos, a lógica do Power Fx é, normalmente, composta por muitas fórmulas mais pequenas que são independentes. Isto facilita a sua compreensão e permite melhorias sem perturbar a lógica existente.

O Power Fx é uma linguagem declarativa, tal como o Excel. O criador define o comportamento pretendido, mas cabe ao sistema determinar e otimizar como e quando o fazer. Para que seja prático, a maior parte do trabalho é feito através de funções puras, sem efeitos secundários, tornando o Power Fx também numa linguagem funcional (novamente, tal como o Excel).

Sempre em direto

Um aspeto determinante das folhas de cálculo é o facto de estarem sempre ativas, com as alterações a serem refletidas instantaneamente. Não existe um modo de compilação ou de execução numa folha de cálculo. Quando uma fórmula é modificada ou um valor é introduzido, a folha de cálculo é imediatamente recalculada para refletir as alterações. Quaisquer erros detetados são imediatamente mostrados e não interferem com o resto da folha de cálculo.

A mesma coisa é implementada com o Power Fx. É usado um compilador incremental para manter o programa em sincronização permanente com os dados sobre os quais está a trabalhar. As alterações são propagadas automaticamente através do grafo do programa, afetando os resultados dos cálculos dependentes, o que pode impulsionar propriedades em controlos como a cor ou a posição. O compilador incremental também fornece uma experiência de edição de fórmulas rica com IntelliSense, sugestões, preenchimento automático e verificação de escrita.

Na animação abaixo, o número de encomenda é apresentado num controlo de etiquetas dependente do controlo de deslize, mesmo que existam dois erros nas etiquetas abaixo dele. A aplicação está viva e é interativa. A primeira tentativa de corrigir a fórmula ao introduzir .InvalidName resulta na apresentação imediata de uma linha vermelha ou de um erro, como é suposto, mas a aplicação continua a funcionar.

Sempre em direto.

Quando .Employee é introduzido, isto faz com que o painel Data adicione a tabela Empregados, os metadados para esta tabela sejam obtidos e as sugestões para as colunas são imediatamente oferecidas. Apenas percorremos uma relação de uma tabela para outra e o sistema fez os ajustes necessários às referências da aplicação. O mesmo acontece ao adicionar um .Customer.

Após cada alteração, o controlo de deslize continua com o seu último valor e quaisquer variáveis mantêm o seu valor. Ao longo de tudo isto, o número da encomenda continuou a ser apresentado na etiqueta superior como deveria. A aplicação tem estado em direto, a processar dados reais, todo o tempo. Podemos guardá-lo, sair, e outros podem abri-lo e usá-lo, tal como no Excel. Não existe nenhum passo de criação, nenhuma compilação, há apenas um passo de publicação para determinar qual a versão da aplicação pronta para os utilizadores.

Baixo código

O Power Fx descreve a lógica de negócio em fórmulas concisas, mas poderosas. A maior parte da lógica pode ser reduzida a uma única linha com muita expressividade e controlo para necessidades mais complexas. O objetivo é manter um número mínimo de conceitos que um criador precisa de compreender – idealmente, não mais do que um utilizador do Excel já saberia.

Por exemplo, para procurar o nome próprio de um colaborador para uma encomenda, escreva o Power Fx conforme mostrado na animação que se segue. Além dos conceitos do Excel, o único conceito adicionado aqui utilizado é a notação de ponto "." para desagregar 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 têm de ser explicitamente codificados no JavaScript equivalente.

JavaScript de pouco código.

Vejamos mais pormenorizadamente o que o Power Fx faz por nós e a liberdade que tem para otimizar porque a fórmula era declarativa:

  • Assíncrono: todas as operações de dados no Power Fx são assíncronas. O criador não precisa de especificar isto, nem o criador precisa de sincronizar as operações depois de terminada a chamada. O criador não precisa de estar ciente deste conceito, não precisa de saber o que é uma função de promessa ou lambda.

  • Local e remoto: o Power Fx utiliza a mesma sintaxe e funções para dados locais na memória e remotos numa base de dados ou num serviço. O utilizador não precisa de pensar nesta distinção. O Power Fx delega automaticamente aquilo que pode para o servidor, para processar filtros e ordena lá de forma mais eficiente.

  • Dados relacionais: Encomendas e Clientes são duas tabelas diferentes, com uma relação de muitos para um. A consulta OData requer um "$expand" com conhecimentos da chave estrangeira, semelhante a uma Junção em SQL. A fórmula não tem nada disto, na verdade, as chaves da base de dados são outro conceito que o criador não precisa de saber. O criador pode usar uma notação de ponto simples para aceder a todo o gráfico de relações de um registo.

  • Projeção: ao escrever uma consulta, muitos programadores escrevem select * from table, o que recupera todas as colunas de dados. O Power Fx analisa todas as colunas utilizadas através de toda a aplicação, mesmo através de dependências de fórmulas. A projeção é otimizada automaticamente e, mais uma vez, um criador não precisa de saber o que significa "projeção".

  • Obter apenas o que é necessário: neste exemplo, a função LookUp implica que só deve ser recuperado um registo e é tudo o que é devolvido. Se forem solicitados mais registos utilizando a função Filter – para a qual poderão ser elegíveis milhares de registos – só uma única página de dados será obtida de cada vez, na ordem dos 100 registos por página. O utilizador tem de fazer gestos numa galeria ou tabela de dados para ver mais dados, que serão mostrados automaticamente. O criador pode analisar grandes conjuntos de dados sem precisar de pensar em limitar os pedidos de dados a segmentos geríveis.

  • Executado apenas quando é necessário: definimos uma fórmula para a propriedade Text do controlo de etiqueta. À medida que a variável selecionada muda, LookUp é automaticamente recalculado e a etiqueta é atualizada. O criador não precisava de escrever um processador onChange para Seleção e não precisava de se lembrar que esta etiqueta depende dele. Esta é uma programação declarativa, tal como discutido anteriormente: o criador especificou o que queria ter na etiqueta, não como ou quando deveria ser recolhida. Se esta etiqueta não for visível porque está num ecrã que não é visível, ou a respetiva propriedade Visible é falsa, podemos adiar este cálculo até a etiqueta ser visível e eliminá-la efetivamente, se isso raramente acontecer.

  • Tradução da sintaxe do Excel: o Excel é utilizado por muitos utilizadores, a maioria dos quais sabe que o E comercial (&) é utilizado para concatenação de cadeias. O JavaScript utiliza um sinal de adição (+) e outros idiomas utilizam um ponto (.).

  • Nomes a apresentar e localização: First Name é utilizado na fórmula do Power Fx enquanto nwind_firstname é utilizado no JavaScript equivalente. No Microsoft Dataverse e no SharePoint, existe um nome a apresentar para colunas e tabelas, além de um nome lógico exclusivo. Os nomes a apresentar são muitas vezes muito mais intuitivos, como neste caso, mas têm outra qualidade importante na medida em que podem ser localizados. Se tiver uma equipa multilíngue, cada membro da equipa poderá ver os nomes de tabelas e de campos no seu próprio idioma. Em todos os casos de utilização, o Power Fx certifica-se de que o nome lógico correto é enviado automaticamente para a base de dados.

Sem código

Não é preciso ler e escrever no Power Fx para começar a expressar lógica. Existem muitas personalizações e lógicas que podem ser expressas através de simples comutadores e criadores de IU. Estas ferramentas sem código foram criadas para ler e escrever no Power Fx, de forma a garantir que há bastante espaço para alguém o levar mais além, ao mesmo tempo que reconhece que as ferramentas sem código nunca irão oferecer toda a expressividade da linguagem completa. Mesmo quando é utilizada com construtores sem código, a barra de fórmulas é fundamental no Power Apps para educar o criador sobre o que está a ser feito em seu nome, para que ele possa começar a conhecer o Power Fx.

Vejamos alguns exemplos. No Power Apps, o painel de propriedades fornece comutadores e botões sem código para as propriedades dos controlos. Na prática, a maioria dos valores de propriedade são estáticos. Pode usar o criadores de cores para alterar a cor de fundo do Gallery. Tenha em atenção que a barra de fórmulas reflete esta mudança, atualizando a fórmula para uma chamada RGBA diferente. Em qualquer altura, pode aceder à barra de fórmula e dar mais um passo – neste exemplo utilizando ColorFade para ajustar a cor. A propriedade de cor continua a ser apresentada no painel de propriedades, mas um ícone fx aparece a pairar e será direcionado para a barra de fórmulas. Isto funciona na perfeição de duas maneiras: remover a chamada ColorFade devolve a cor a algo que o painel de propriedades consegue compreender e poderá utilizá-la novamente para definir uma cor.

Sem cor de código.

Eis um exemplo mais complicado. A galeria mostra uma lista de empregados da Dataverse. O Dataverse fornece vistas sobre dados de tabela. Podemos selecionar uma destas vistas e a fórmula é alterada para utilizar a função Filter com este nome de vista. Os dois menus pendentes podem ser utilizados para marcar a tabela e a vista corretas sem tocar na barra de fórmulas. Mas digamos que quer ir mais longe e adicionar uma ordenação. Podemos fazê-lo na barra de fórmulas e o painel da propriedades mostra novamente um ícone fx e direciona modificações para a barra de fórmulas. E, mais uma vez, se simplificarmos a fórmula para algo que o painel de propriedades pode ler e escrever, pode ser usado novamente.

Sem ordenação de código.

Estes têm sido exemplos simples. Acreditamos que o Power Fx é uma excelente linguagem para descrever interações sem código. É conciso, poderoso e fácil de analisar, e fornece espaço que é tantas vezes necessário com "sem penhascos" até pouco código.

Código pro

Os fabricantes de pouco código, por vezes, criam coisas que exigem a ajuda de um especialista ou são assumidos por um programador profissional para manter e melhorar. Os profissionais também apreciam que a programação de baixo código pode ser mais fácil, mais rápida e menos dispendiosa do que criar uma ferramenta profissional. Nem todas as situações requerem o poder total do Visual Studio.

Os profissionais querem usar ferramentas profissionais para serem mais produtivos. As fórmulas do Power Fx podem ser armazenadas em ficheiros de origem YAML, que são fáceis de editar com o Visual Studio Code, o Visual Studio ou com qualquer outro editor de texto e permitem que o Power Fx seja colocado sob o controlo de origem com o GitHub, o Azure DevOps ou qualquer outro sistema de controlo de código de origem.

Código profissional do Visual Studio Code.

Código GitHub Pro.

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

Além disso, o Power Fx é excelente a juntar componentes e serviços criados por profissionais. Os conectores originais fornecem acesso a centenas de origens de dados e serviços Web, os conectores personalizados permitem ao Power Fx comunicar com qualquer serviço Web REST e os componentes de código permitem ao Power Fx interagir com JavaScript totalmente personalizado no ecrã e na página.

Princípios de design

Simples

O Power Fx foi concebido para visar a audiência dos criadores, cujos membros não foram formados como programadores. Sempre que possível, usamos os conhecimentos que este audiência já saberia ou pode captar rapidamente. O número de conceitos necessários para ser bem sucedido é reduzido ao mínimo.

Simplicidade também é boa para os programadores. Para a audiência de programadores, pretendemos que seja uma linguagem de baixo código que reduz o tempo necessário para criar uma solução.

Consistência com Excel

A linguagem Microsoft Power Fx aproveita muita da linguagem de fórmulas do Excel. Procuramos tirar partido do conhecimento e experiência em Excel dos muitos criadores que também utilizam o Excel. Os tipos, operadores e semântica de função estão o mais próximo possível do Excel.

Se o Excel não tiver uma resposta, a seguir vamos olhar para o SQL. Depois do Excel, o SQL é a próxima linguagem declarativa mais utilizado e pode fornecer orientação sobre as operações de dados e datilografia forte que o Excel não tem.

Declarativo

O criador descreve o que querem que a respetiva lógica faça, não exatamente como ou quando o fazer. Isto permite ao compilador otimizar através da execução de operações em paralelo, adiando o trabalho até ser necessário, e pré-obtendo e reutilizando dados em cache.

Por exemplo, numa folha de cálculo 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 numa aplicação podem ser encaradas como "recalc-ing", consoante seja necessário, baseado nas ações do utilizador, nas alterações às base de dados ou nos eventos do temporizador.

Functional

Favorecemos as funções puras que não têm efeitos colaterais. Isto resulta numa lógica que é mais fácil de compreender e dá ao compilador mais liberdade para otimizar.

Ao contrário do Excel, as aplicações, por natureza, sofrem mutações de estado – por exemplo, as aplicações têm botões que guardam as alterações no registo numa base de dados. Algumas funções, portanto, têm efeitos colaterais, embora limitemos isto tanto quanto é prático.

Composição

Sempre que possível, a funcionalidade que é adicionada integra-se bem com a funcionalidade existente. As funções poderosas podem ser decompostas em partes menores que podem ser mais facilmente usadas de forma independente.

Por exemplo, um controlo Galeria não tem propriedades Sort e Filter separadas. Em vez disso, as funções Sort e Filter são compostas em conjunto numa única propriedade Items. A IU para expressar o comportamento de Sort e de Filter está em camadas sobre a propriedade Items usando um editor bidirecional para esta propriedade.

Com importância

Os tipos de todos os valores são conhecidos no momento da compilação. Isto permite a deteção antecipada de erros e sugestões ricas durante a criação.

Os tipos polimórficos são suportados, mas antes de poderem ser utilizados, o respetivo tipo tem de ser fixado a um tipo estático, e esse tipo tem de ser conhecido no momento da compilação. As funções IsType e AsType são fornecidas para tipos de testes e transmissão.

Inferência de tipo

Os tipos são derivados da sua utilização sem serem declarados. Por exemplo, definir uma variável para vários resultados no tipo da variável que está a ser estabelecida como um número.

A utilização do tipo conflituoso resulta num erro no tempo de compilação.

Separadores decimais sensíveis à região

Algumas regiões do mundo utilizam o ponto (.) como separador decimal, enquanto outros utilizam a vírgula (,). Isto é o que o Excel também faz. Normalmente, isto não é feito noutras linguagens de programação, que normalmente utilizam um ponto canónico (.) como separador decimal para todos os utilizadores em todo o mundo. Para ser o mais acessível possível para os criadores a todos os níveis, é importante que 3,14 seja um número decimal para uma pessoa em França que tenha usado essa sintaxe toda a sua vida.

A escolha do separador decimal tem um impacto em cascata no separador de lista, utilizado para argumentos de chamada de função, e o 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) ;; (duplo ponto e vírgula)

Mais informações: Suporte global

Não orientado para objetos

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

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

Extensível

Os criadores podem criar os seus componentes e funções utilizando o próprio Power Fx. Os programadores podem criar os seus componentes e funções escrevendo JavaScript.

Fácil de utilizar por programadores

Embora os criadores sejam o nosso alvo principal, tentamos que seja uma experiência fácil para programadores sempre que possível. Se não entrar em conflito com os princípios de estruturação descritos anteriormente, fazemos as coisas de uma forma que um programador apreciará. Por exemplo, o Excel não tem capacidade para adicionar comentários, pelo que utilizamos comentários em linha e em linha tipo C.

Evolução da linguagem

A evolução das linguagens de programação é necessária e complicada. Todos – com razão – receiam que uma alteração, por muito bem intencionada que seja, possa quebrar o código existente e exigir que os utilizadores aprendam um novo padrão. O Power Fx leva a retrocompatibilidade a sério, mas também acreditamos que nem iremos acertar à primeira e que vamos coletivamente como uma comunidade aprender o que é melhor. Temos de evoluir e concebemos o suporte para linguagem do Power Fx desde o início.

O carimbo de versão da linguagem está incluído em todos os documentos do Power Fx que são guardados. Se quisermos fazer uma alteração incompatível, escreveremos aquilo que chamamos "conversor de retrocompatibilidade" que reescreve a fórmula automaticamente da vez seguinte que for editada. Se a alteração for de algo importante sobre o qual precisamos de formar o utilizador, também apresentaremos uma mensagem com uma ligação para os documentos. Através desta funcionalidade, continuamos a poder carregar aplicações que foram criadas com as versões de pré-visualização do Power Apps de há muitos anos, apesar de todas as alterações que ocorreram desde então.

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

Mostrar erro.

Os utilizadores adoraram, mas também nos pediram uma forma de mostrar uma faixa de sucesso (fundo verde) ou uma faixa informativa (fundo azul). Assim, criámos uma função Notify mais genérica que necessita de um segundo argumento para o tipo de notificação. Podíamos ter adicionado apenas Notify e mantido ShowError como estava, mas em vez disso substituímos ShowError por Notify. Removemos uma função que já tinha estado em produção e substituímo-la por outra coisa. Como haveria duas formas de fazer o mesmo, isto teria causado confusão – sobretudo para os novos utilizadores – e, mais importante ainda, teria acrescentado complexidade. Ninguém se queixou, toda a gente apreciou a mudança e, em seguida, passou para a sua próxima funcionalidade Notify.

É assim que a mesma aplicação fica quando carregada na versão mais recente do Power Apps. Não foi necessária qualquer ação por parte do utilizador para esta transformação acontecer, ocorreu automaticamente quando a aplicação foi aberta.

A função Notify substitui ShowError.

Com esta instalação, o Power Fx pode evoluir mais depressa e de forma mais agressiva do que a maior parte das linguagens de programação.

Sem valor indefinido

Algumas linguagens, como o JavaScript, utilizam o conceito de um valor indefinido para variáveis não inicializadas ou propriedades em falta. Por uma questão de simplicidade, evitámos este conceito. As instâncias que estariam indefinidas noutras linguagens são tratadas como um erro ou um valor em branco. Por exemplo, todas as variáveis com inicialização anulada começam com um valor em branco. Todos os tipos de dados podem assumir o valor de em branco.

Tipos de dados
Operadores e identificadores
Tabelas
Variáveis
Lógica imperativa
Suporte global
Gramática de expressão
Gramática da fórmula YAML
Fórmulas em aplicações de tela