Power Apps で排他的論理和を実現する方法
はじめに
Power Apps には論理積 (And) ・論理和 (Or) ・否定 (Not) 演算子または関数がありますが、排他的論理和 (Xor) 演算子または関数はありません。本記事は Power Apps で排他的論理和を実現する方法を説明します。
コンテキスト
- Power Apps キャンバスアプリ
- Power Fx を有効にしたデスクトップフロー
対象読者(前提知識)
- Power Apps でキャンバスアプリを作成できる方
- Power Fx を有効化したデスクトップフローを作成できる方
And, Or, Not を組み合わせて Xor を実現する
はじめに And, Or, Not を組み合わせて Xor を実現する方法を説明します。Xor は And, Or, Not を組み合わせて次のように表されます。
Xor を実現する式
<関数表記>
Or(And(Not(x), y), And(x, Not(y)))
<Visual Basic 演算子表記>
Not x And y Or x And Not y
<JavaScript 演算子表記>
!x && y || x && !y
<参考文献>
And、Or、および Not 関数
真理値表
真理値表を書くと次のようになります。排他的論理和が実現できていることが確認できます。
x |
y |
Not x |
Not y |
Not x And y |
x And Not y |
Not x And y Or x And Not y |
|---|---|---|---|---|---|---|
false |
false |
true |
true |
false |
false |
false |
false |
true |
true |
false |
true |
false |
true |
true |
false |
false |
true |
false |
true |
true |
true |
true |
false |
false |
false |
false |
false |
Boolean, Mod, true=1, false=0 を組み合わせて Xor を実現する
次に Boolean 関数、Mod 関数と true=1、false=0という性質を組み合わせて Xor を実現します。次の関数は Xor と等しくなります。
Xor を実現する式
Boolean(Mod(x + y, 2))
この関数について説明するために、Boolean 関数、Mod 関数、 true=1, false=0という性質についてそれぞれ説明します。
Boolean 関数
はじめに Boolean 関数について説明します。Boolena 関数はテキストや数値をブール値に変換する関数です。ここでは、数値の変換規則のみ示します。
x |
Boolean(x) |
|---|---|
0 |
false |
0 以外 |
true |
<参考文献>
Boolean 関数
Mod 関数
次に Mod 関数について説明します。Mod 関数は x / y を整数の範囲で求めたときの余りを計算する関数です。例えば Mod(x, 2) は次のようになります。
x |
Mod(x, 2) |
x = 2 * Int(x / 2) + Mod(x, 2) |
|---|---|---|
0 |
0 |
0 = 2 * 0 + 0 |
1 |
1 |
1 = 2 * 0 + 1 |
2 |
0 |
2 = 2 * 1 + 0 |
3 |
1 |
3 = 2 * 1 + 1 |
4 |
0 |
4 = 2 * 2 + 0 |
5 |
1 |
5 = 2 * 2 + 1 |
<参考文献>
Mod 関数
true=1, false=0
最後に true=1, false=0 という性質について説明します。Power Apps ではブール値 true, false は数値として解釈することができ、それぞれ 1, 0 となります。以下に簡単な証明を示します。
<true=1 であることの証明>
1 * true = 1 です。従って true = 1 です。
<false=0 であることの証明>
1 + false = 1 です。従って false = 0 です。
真理値表
真理値表を書くと次のようになります。ここでも排他的論理和が実現できていることが確認できます。
x |
y |
x + y |
Mod(x + y, 2) |
Boolean(Mod(x + y, 2)) |
|---|---|---|---|---|
false=0 |
false=0 |
0 |
0 |
false |
false=0 |
true=1 |
1 |
1 |
true |
true=1 |
false=0 |
1 |
1 |
true |
true=1 |
true=1 |
2 |
0 |
false |
Discussion