元々Power Appsにはforループに当たる処理がなくて、スライダーとかタイマーとかを使って工夫でforループを実現していた。
けれど、最近Power Appsの関数を眺めていたらforループが実装されてるっぽいので、ここにメモ。
Foreachは元々あったけど
こんな感じに日本語のコレクションができあがる!
では、もしこの英単語のコレクションを和訳するときに、3の倍数の英単語だけ「アホ」と和訳したいときはどうすればよいか?
ForAllだと色々工夫が必要だったけど、このForAll関数に最近追加されたSequence関数を使うと、なんちゃってforループが実現できる!
※世界のナベアツ知っている人いるかな?w
Sequence関数
Sequence関数は連番のテーブルを作成してくれる関数。
Sequence(4)って呼ぶと、[1,2,3,4]といった配列を返してくれる。
さらに省略可能な第2引数と第3引数を使うと、連番の開始位置や、数字の増え方を指定できる。
詳しくは公式で。
forループと配列へのインデックスアクセス
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
Index関数が追加されて、ますますforループの使い道が増えそう!
コメント