こんにちは、あんこ先生です。
PowerAppsのダークホース、With関数をご存じですか?
個人的にもっと早く知っておきたかった関数ナンバー1がこのWith関数です。
たとえば、ひとつのアクションで同じ計算式を何度か使いまわすことがありますよね。
この場合、記述が長くなりますし修正はその使用数分行わないといけません。
それを回避するため、変数に格納すると管理が煩雑になりますし、リソースを消費しますよね。
そんな問題を解決できるのが、このWith関数です。
そこで、今回は「コードを読みやすくしたい」、「メンテナンスの手間を抑えたい」といった方を対象にWith関数の使い方を紹介します。
使い方次第で化ける素敵な関数です。
この記事を読めば、With関数を使いこなせるようになります。
Contents
コードを読みやすく省力化するWith関数の使い方
With関数とは
With関数は、数式を名付けしコードを読みやすくします。
名付けしたい数式は冒頭の{}内に記述し、後述する数式で使用します。
UpdateContext関数と同様、インラインレコード構文を使用できます。
名付けした数式は、With関数のスコープ(括弧で囲まれた範囲内)に限定された変数のように参照できます。
With関数の評価が終わると解放されるため、各種変数のようにリソースを消費しません。
同じ理由で、コントロール内であっても他アクションで参照はできません。
公式ではコンテキスト変数やグローバル変数よりも使用を推奨されているようです。
もっとアピールしてくれないと気づきませんよ。
次は、With関数を使う3つのメリットを紹介します。
非動作プロパティで変数が扱える│With関数のメリット①
基本的な記述方法
例えば上記画像のようにテキストをラベルコントロールに表示させるとします。
普通のやり方では、Textプロパティに直接記述しますよね。
"あんこさんは博多通りもんが好き"
極端な例ですが、これを回りくどくWith関数を使って表現すると次のようになります。
ご覧の通り、名付けした数式を使いまわさないなら直接記述した方がよいです。
では、これをグローバル変数を使って記述してみます。
このように宣言しなければなりません。
ちょっと待ってください。
変数の宣言は、Textプロパティのような非動作プロパティでは行えません。
つまり、With関数を使えば非動作プロパティでも変数(のようなもの)を扱えるのです。
これ、じつは結構すごいことなんです。
次の画像は仕入価格と販売価格から原価率を求めています。
直接記述するより、読みやすいですよね。
ちなみに、動作プロパティなら数式の結果を変数に格納することもできますよ。
メンテナンスが容易│With関数のメリット②
使いまわす数式を1か所で修正できる
2つめのメリットはメンテナンスが容易なことです。
上図の折れ線グラフはSVGで記述しています。
値をそのまま使用すると小さくなるため、重みをつけています。
この重み、実は9か所も使用しているんです。
重みを変えるとき、これらすべてを修正するのは面倒ですよね。
そこで、With関数の出番です。
冒頭で重みに名付けして、数式に加えています。
このやり方なら、冒頭の値を変えるだけですべての数式に反映します。
メンテナンス性において、どちらの記述が容易かは明白ですよね。
処理速度の向上│With関数のメリット③
データソースへのアクセス回数を減らせる
3つめのメリットは処理速度が向上することです。
棚卸記録のデータ更新を例に解説していきます。
仕様は次の通りです。
- 日付と商品コードでアイテムが重複していないか確認する。
- 更新用データの数量が0なら棚卸記録から削除する。
- 未登録なら棚卸記録に追加する。
- 登録済みなら棚卸記録を更新する。
次のコード見ていただくとわかるとおり、LookUp関数を多用しています。
これひとつひとつを評価するため、計4回データソースへアクセスしています。
また、これらはまったく同じ記述なんですが、トレース時は全部読まないとわかりませんよね。
ここでも、With関数の出番です。
いかがですか?
データソースへのアクセスは冒頭の1回に抑えることができました。
2回目以降はメモリ上に格納したRecを参照します。
そのため、処理速度の向上につながります。
また、コードの記述もスッキリして読みやすくなったと思います。
おまけ│ギャラリーのItems切替
評価コントロールの値によってデータソースを切り替えています。
ちょっと極端ですが、参照させるデータソースを冒頭で名付けしています。
その後、Switch関数で条件に見合ったデータソースを返すようにします。
様々な条件でデータソースを切り替えるときに役立つと思いますよ。
With関数で読みやすくメンテしやすいコードを書く方法のまとめ
今回はWith関数を使う3つのメリットを紹介しました。
- 非動作プロパティでも変数(のようなもの)を利用できる
- 使いまわす数式を1か所で修正できる
- データソースへのアクセス回数を減らせる
いかがですか?With関数を使いたくなってきませんか?
もちろん単純なものには使わない方が適しています。
Patch関数やSVGなど何度も参照するデータがあれば、ぜひ活用してみてください。
インライン構文とは、レコード格納{ Price: 110, Items: 15 }みたいに続けて宣言できるものだそうです。