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