連載:[完全版]究極のC#プログラミング

Chapter5 null許容型

川俣 晶
2009/09/28

5.6 3値論理型として使用できるbool?型

 通常、論理型はtrue/falseという2つの値のいずれかを取る。それゆえに、trueでなければ必ずfalse、falseでなければ必ずtrueとなる。

 よって、以下の2つの文は等価だと見なせる。

if ( 式 ) { 文1; } else { 文2; }

if ( !式 ) { 文2; } else { 文1; }

 ところが世の中には、2つではなく3つの値で表す「3値論理型」が存在する。有名なものには、SQLの論理型がある。

 nullを許容するbool?型は、true、false、nullという3種類の状態を持つことができるので、3値論理型として使用できる。そこで、bool?型に対する「&」と「|」の演算子は、SQLと互換性のある表5.1のような結果を出すようになっている。

x
y
x & y
x | y
true
true
true
true
true
false
false
true
true
null
null
true
false
true
false
true
false
false
false
false
false
null
false
null
null
true
null
true
null
false
false
null
null
null
null
null
表5.1 bool?型における「&演算」と「|演算」の演算結果

 したがって、本来はできないはずのtrueとnullに対する&演算などが実行できる。

 リスト5.9は実際にそれを行った例である。「a & b」は計算可能であり、変数cの値はnullになる。よって、このプログラムは「c == null」が成立するのでtrueを出力する。

using System;

class Program
{
  static void Main(string[] args)
  {
    bool? a = true, b = null;
    bool? c = a & b;

    Console.WriteLine(c == null); // 出力:True
  }
}
リスト5.9 3値論理型として使用したbool?型


 INDEX
  [完全版]究極のC#プログラミング
  Chapter5 null許容型
    1.5.1 null許容型とは何か?
    2.5.2 なぜnullを入れたいのか?
    3.5.3 null許容型の内部構造
    4.5.4 null合体演算子
    5.5.5 is演算子の挙動に注意
  6.5.6 3値論理型として使用できるbool?型
    7.5.7 nullを許容するとパフォーマンスに影響するか?/null許容への批判/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間