FizzBu​​zz,功率FX和JavaScript的快速比较
#javascript #lowcode #powerapps #powerplatform

Power FX是电源平台的低代码语言。最初仅用于Canvas Power应用程序,它是一种基于表达的语言,其学习曲线集中在Excel用户上。 Microsoft已从私人虚拟代理和Dataverse开始,将其扩展到平台的其他领域。

那么,为什么Procode开发人员想学习它,因为看起来该语言将继续开发和扩展微软的技术套件,因此很有可能会出现在我们的Workstream中。

以及为什么Power App开发人员要学习JavaScript,良好的脚本组件使用JavaScript和Office脚本使用Typescript(JavaScript的子集)。因此,学习JavaScript是一个逻辑进步。

Fizz Buss是一个非常简单的编码练习,采用多种不同的方法来提供相同的解决方案,我认为这将是Power FX和JavaScript的差异和相似之处的很好的证明。

好吧,什么是嘶嘶声:

Fizz Buzz是一个小组文字游戏,供儿童教他们有关分裂的信息。玩家轮流逐步计数,替换了用“ fizz”一词排除的任何数字,而用“ buzz”一词排除的任何数字都可以排除在5个单词,任何数字都可以用3和5的任何数字用“ fizzbuzz”。<<<<<<<<<<<<<。 /p>

因此要求是:​​

  • 通过一个增量
  • 如果增量可以除以5印刷'fizz'
  • 如果增量可以除以3打印'嗡嗡声'
  • 每个增量应在Sameline上

简单ð

对于JavaScript,我会做

function fizzBuzz(){
const iEnd=100
  for(i=1;i<iEnd;i++){
    let sPrint="";
    if(i % 3==0){sPrint="fizz"};
    if(i % 5==0){sPrint+="buzz"};
    if(sPrint!=""){console.log(sPrint)};
    //console.log(i+"-"+sPrint); use instead above for demo below
  }
}

Fizzbuss JavaScript demo

有2个小问题用于FX比较,Power FX需要触发,并且没有控制台,因此必须在某个地方进行更新。
我们必须将功能更改为单击事件:
document.getElementById('yourTriggerButton').addEventListener('click', function(){}

,我们用
替换了console.log document.getElementById('yourOutput').innerHTML=sPrintAll;
由于我们现在覆盖不添加到我们必须存储以前的行,添加新行,然后写入页面。

,看起来会像这样。

document.getElementById('yourTriggerButton').addEventListener('click', function() {
  const iEnd=100  
  let sPrintAll="";
  for(i=1;i<iEnd;i++){
    let sPrint="";
    let bNewLine=false;
    if(i % 3==0){
      sPrint="fizz";
      bNewLine=true
    };
    if(i % 5==0){
      sPrint+="buzz";
      bNewLine=true;
    };
    if(bNewLine){sPrint+="<br>"};
    sPrintAll+=sPrint;
    document.getElementById('yourOutput').innerHTML=sPrintAll;
  }
});

在Power FX中,它将是:

//Label Component Text set to sPrint
Collect(arrayI,Sequence(100));
Set(sPrintAll,"");
ForAll(arrayI,
  Set(bNewLine,false);
  Set(sPrint,"");
  If(Mod(Value,3)=0,
    Set(sPrint,"Fizz");
    Set(bNewLine,true);
  );
  If(Mod(Value,5)=0,
    Set(sPrint,sPrint&"Buzz");
    Set(bNewLine,true);
  );
  If(bNewLine,Set(sPrint,sPrint&Char(10)));
  Set(sPrintAll,sPrintAll&sPrint);
)

好吧,不,这是错误的,Forall仅用于修改数据,它完全范围范围范围内。

Power FX forAll error

目前不可能在Power FX上进行任何循环(是的,它更像Excel,而不是JavaScript)。要在Power FX中进行循环,您必须利用Canvas应用中的计时器组件。参数需要:

ontimerstart:

Set(bNewLine,false);
Set(i,i+1);
Set(sPrint,"");
If(Mod(i,3)=0,
  Set(sPrint,"Fizz");
  Set(bNewLine,true);
);
If(Mod(i,5)=0,
  Set(sPrint,sPrint&"Buzz");
  Set(bNewLine,true);
);
If(bNewLine,Set(sPrint,sPrint&Char(10)));
//Set(sPrint,i&"-"&sPrint&Char(10)); as shown in demo video
Set(sPrintAll,sPrintAll&sPrint);
If(i>=100,Set(bStart,false)

重复:bStart
持续时间:10
start:bStart-通过开始按钮设置为true

标签组件文本:sPrint

Power FX FizzBuzz demo

不幸的是,这意味着我们现在不与我们编写的JavaScript代码保持一致,因为我们在JavaScript中具有相当的计时器。
我们将代码从for循环内部移动到内部setInterval,这几乎与计时器组件
相同 const timer=setInterval(function(){ },10)
为了停止计时器,我们使用
clearInterval(timer)

document.getElementById('yourTriggerButton').addEventListener('click', function() {
  let i=1;
  let sPrintAll="";
  const timer=setInterval(function(){ 
    let sPrint="";
    let bNewLine=false;
    if(i % 3==0){
      sPrint="fizz";
      bNewLine=true
    };
    if(i % 5==0){
      sPrint+="buzz";
      bNewLine=true;
    };
    if(bNewLine){sPrint+="<br>"};
    sPrintAll+=sPrint;
    document.getElementById('yourOutput').innerHTML=sPrintAll;  
    i++;
    if(i==100){clearInterval(timer)}
  }, 10);
});

尽管语法与众不同,但它们之间的更大挑战是结构的差异。像大多数低代码一样,Power FX都依赖于预制组件。然后将代码放在顶部。 JavaScript,特定于库的特定内容是相同的,但是将组件放在代码的顶部。 JavaScript允许您在存在差距并具有两全其美的情况下构建自己的构建,这对于Microsoft允许您在JavaScript中构建自定义组件的原因很有意义。


有趣的呼唤我发现了,尽管“低代码”通常被认为是较少的代码,但不一定是。当类似的时候,通常是这样的,但是通常可以在Procode中找到更直接/更短的解决方案。

解决方案 线数
javascript 7
Power FX 12
javascript喜欢 18

我经常将其视为二进制文件,因为它只有2个值,它可以被认为是简单的,但是简单性使复杂性呈指数增长,等于更长的代码,例如99在二进制中是1100011。


其他比较
Table of Power FX to JavaScript comparison

注意:

  • 电源应用程序中的本地变量被示为屏幕上,JavaScript是函数范围
  • Power FX也可以使用'!”不等于,'&&'for and'||'对于或

fureter读取