3値論理演算子
概要
論理演算のどちらかのオペランドがnullの場合に、3値ロジックを適用して論理演算できるようにしたい。
動機
bool?型を使った3値ロジック演算を使いたいから。
詳細設計
左右両方がbool型(null許容/非許容問わず)またはVAR?型の場合に3値論理演算を行う。
それ以外の型ではINVALID_OPERAND(0x003)にする。
演算子は、!、&、|、^をサポートする。短絡評価はサポートしない。
論理構成
真偽値表
| x |
y |
|
!x |
|
x & y |
x | y |
x ^ y |
| true |
true |
|
false |
|
true |
true |
false |
| true |
false |
|
false |
|
false |
true |
true |
| true |
null |
|
false |
|
null |
true |
null |
| false |
true |
|
true |
|
false |
true |
true |
| false |
false |
|
true |
|
false |
false |
false |
| false |
null |
|
true |
|
false |
null |
null |
| null |
true |
|
null |
|
null |
true |
null |
| null |
false |
|
null |
|
false |
null |
null |
| null |
null |
|
null |
|
null |
null |
null |
方針
- nullに対するNOT演算は、そのままnullとなる
- XOR演算でxとyどちらかがnullの場合は、nullとなる
- OR、AND演算はクリーネの3値論理に従う
参考
欠点
前例
未確定の設計
Discussion
3値論理演算子
概要
論理演算のどちらかのオペランドが
nullの場合に、3値ロジックを適用して論理演算できるようにしたい。動機
bool?型を使った3値ロジック演算を使いたいから。詳細設計
左右両方が
bool型(null許容/非許容問わず)またはVAR?型の場合に3値論理演算を行う。それ以外の型では
INVALID_OPERAND(0x003)にする。演算子は、
!、&、|、^をサポートする。短絡評価はサポートしない。論理構成
真偽値表
方針
参考
欠点
前例
未確定の設計
Discussion