はじめに
この記事は、Power Apps Advent Calendar 2023 12/17 担当分の記事です。
きっかけはこちらのツイート
https://twitter.com/koruneko32767/status/1727991967622246608?t=YLkrcNzrC4en37TnhWqhGA&s=19
今回はPower Appsのデータ型と計算順序について記載します。
データ型について
Power AppsではC#やJavaのような静的型付けではなく、PythonやJavaScriptのような動的型付けとなっています。
変数に入る値からコンパイラ側が、データ型を判断して動的に割り振ってくれるような動きですね。
詳しくはこちらをご参照ください。
Power Appsでの計算
さて、以上のPower Appsでのデータ型の取り扱いを理解したうえでPower Appsでの計算をみていきましょう。
なお、文字列型とはいっても数値を文字列にして計算を行います。
演算子による型変換
数値型 + 文字列型
まずはツイートでもしていた"数値型 + 文字列型"です。
結果は以下のようになります。
"数値型 + 文字列型"は数値型として計算されるようです。
文字列型 + 文字列型
続いて"文字列型 + 文字列型"です。
"文字列型 + 文字列型"も数値になるようですね。
数値型 & 数値型
続いて"数値型 & 数値型"です。
"数値型 & 数値型"は文字列型になるようですね。
数値型 & 文字列型
続いて"数値型 & 文字列型"です。
"数値型 & 文字列型"は文字列型になるようですね。
どういうことか?
まず、なぜ文字列の算術演算が成り立つのか?からお話すると、冒頭でも触れたとおりPower Appsは数式などに渡すべき型をもとに動的に型をキャストしてくれます。
恐らく市民開発者がデータ型というものをあまり意識せずともある程度のアプリを作れるように。との設計思想ですかね?
したがって、
1 + "2"
みたいな数式は
1 + Value("2")
みたいなことが内部では行われています。
よって当たり前ではありますが、このような計算を行うと以下のようなエラーがでてくることになります。
このエラーは以下のような式を設定した場合と同じエラーですね。
次に返されるデータ型に関してですが、Power Appsで計算を行った場合はその演算子の評価結果によって期待されるデータ型にキャストされます。
"+", "-", "*"などの算術演算子では、計算結果として数値型が返ってくるはずですよね。
なので最終結果として数値型が返ってきます。
"&"のような文字列連結演算子を利用した場合は、文字列型が返ってくるはずです。
よって最終結果として文字列型が返ってきます。
演算優先順位
それでは次に気になるのが演算の優先順位ですね。
"+"と"&"
まずは"+"と"&"どちらが先に計算されるか?についての検証です。
①
②
①は以下のような順序で計算が行われているようです。
2 & 3 + 4
2 & 7
27
②は以下のような順序で計算が行われているようです。
2 + 3 & 4
5 & 4
54
どうやら優先順位は算術演算子 > 文字列連結演算子なようですね。
また、文字列演算子が最後に評価されるためデータ型は文字列型になります。
"( )"があった場合
"( )"があった場合は、通常の四則演算と同様に"( )"の中身が先に評価されます。
関数と算術演算子の計算順序
Power Appsで計算を行う場合、算術演算だけでなく関数で計算を行ったりもしますよね。
そのような場合の計算順序に関してです。
この場合は関数の式が先に評価されます。
まぁそういう風に動いてもらわないと困るよね。というのもありますが、関数は"( )"で囲われた場合と同様の計算順序で評価されます。
おわりに
普段何気なくPower Appsで計算を行っているかもしれませんが、数値と文字の混在ケースでの計算が考えられる場合や、計算によって得られるデータ型を意識しなくてはならない場合がPower Appsでアプリを作成している際に出てくるかもしれません。
そのような場合はPower Appsのようなノーコード/ローコードサービスを扱う場合でもデータ型について少し意識してみるようにしてみてください。
また、計算順序をちゃんと意識しないで式を組み立ててしまうと想定通りの結果が得られません。
この計算はどういう順番で行われるのだろう?ということを少し意識して式を作成するようにしてみましょう!