Power Appsでforループができるようになってる!?|Sequence関数とForAllの組み合わせでループを実現

元々Power Appsにはforループに当たる処理がなくて、スライダーとかタイマーとかを使って工夫でforループを実現していた。

けれど、最近Power Appsの関数を眺めていたらforループが実装されてるっぽいので、ここにメモ。

スポンサーリンク

Foreachは元々あったけど

Foreachに当たるForAll関数は元々あって、例えばこんな英語の配列を作り、
「変換」ボタン押下で、ForAllを使って全てのアイテム(英単語)を日本語に直してコレクションに入れると、

こんな感じに日本語のコレクションができあがる!

では、もしこの英単語のコレクションを和訳するときに、3の倍数の英単語だけ「アホ」と和訳したいときはどうすればよいか?

ForAllだと色々工夫が必要だったけど、このForAll関数に最近追加されたSequence関数を使うと、なんちゃってforループが実現できる!

※世界のナベアツ知っている人いるかな?w

Sequence関数

Sequence関数は連番のテーブルを作成してくれる関数。

Sequence(4)って呼ぶと、[1,2,3,4]といった配列を返してくれる。

さらに省略可能な第2引数と第3引数を使うと、連番の開始位置や、数字の増え方を指定できる。

詳しくは公式で。

forループと配列へのインデックスアクセス

そしてこのSequence関数とForAll関数を組み合わせるとこんな感じでforループが実現できる。
実行すると3の倍数だけ「アホ」になっている!
コードはこんな感じ。

ForAll(
    Sequence(CountRows(English)), 
    If(
        Mod(Value,3)<>0,
        Collect(Japanese,MicrosoftTranslator.Translate(Last(FirstN(English, Value)).Value,"ja")),
        Collect(Japanese, "アホ")
    )
);

このコードで「for(i=1; i<=English.Len; i++)」みたいにな動きをしてくれる。

まずiに当たるのがValueプロパティ。

このValueプロパティが、Sequenceで作成された連番の何番目をForAllが実行しているか?を指してくれる。

Sequenceが1からの連番を作ってくれるので、「Sequence(CountRows(English))」で、「for(i=1; i<=Englisth.Len;」までが実現できる。

あとはForAll関数がSequenceの連番を勝手に動いてくれてくれるので、i++の代わりになって、簡単にforループを作ることができる。

ForAllとSequenceを使うとforループが実現できて、LastとFirstNを使って配列にインデックスでアクセスが可能なので、柔軟にデータへのアクセスができる!かもしれない。

おまけ:正弦波を描いてみる

僕が大学1年生のとき(もう15年近く前だ。。。)に初めてプログラムを習った講義の期末のレポートが、UNIXのkterm上にc言語でsin波とcos波を描け!だった。

当時はプログラムが全く分からず、友達のコードを丸パクリして単位を取ったのだけど、せっかくPower Appsでforループができるようになっているので再チャレンジw

まずはsin波。ForAll関数とSequence関数で0°~360°のsin値の配列をギャラリーに入れて、
後はアイコンのY座標で波形を描く!
sin関数をcos関数に変えると、cos波も描ける。
tanもいけてるっぽいけど、±∞のところどうなってるんだろw

コメント

タイトルとURLをコピーしました