C# と Assert でプログラムの処理を確認する

C# Tips PROGRAMMING

こんにちは、mickです。

絶賛 C# でプログラミング中です。プログラミングには、「アサーション」という仕組みがあります。

プログラミングは、「何がどうなるか」を明確にしながらやっていくのが普通です。

「ここの値は○になるはずだ」
「ここには、負の値はこない」
「ここでは、ifとif elseには入るけれど、elseになるような条件はない」

などなど。考えるとキリはありません。

思わぬプログラムミスを見つけるアサーション

こういった考えは、あくまで「プログラムが思い通りに動いているとき」の話です。そんな中で、「もし間違っていたら」を考えたのがこの「アサーション」という仕組みです。自分の知る限り、アサーションがないプログラミング言語はないんじゃないかなぁと思っています。

C# のアサートは少し便利で、デバッグビルドのときだけ動作するのが既定ということです。なので、リリースビルドしてプログラムを納品するときに紛れることがないのが安心。

C# アサーションの書き方

アサーションの一番簡単な書き方は、次の通り。Assert(bool) の真偽値が false になる(検査結果に誤りが見つかると)と、プログラムが停止するようになります。

if(条件1)
{
}
else if(条件2)
{
}
else
{
  // ここにはこない想定なので、万が一きたらアサーションで検知する
  System.Diagnostics.Debug.Assert(false);
}
// a には負の値がこない前提(Calcメソッドは自作メソッド)
int a = Calc();
System.Diagnostics.Debug.Assert(0 <= a);

こうすることで、自分が書いたプログラムが想定外の動きをしていないか、監視することができます。もちろん、あちらこちらでこれをやると大変。

仕様上動作が明確になっていて、誤ったプログラムではシステムが落ちるような致命的な場所で、特に使うのがオススメです。

もちろん、自分がどこにアサーションを張ったかを書いたかを管理できるなら好き使っていいとは思います。

参考URL:Debug.Assert メソッド | Microsoft

記事を読んでくれて嬉しいです。
今日もありがとうございました。

初稿 2021/12/13