🦔

【C#】ビルドエラー時に不具合を検出させるテクニック

2024/11/24に公開

一部の不具合はビルド時に検出させられるものがあったりするので、ビルド時に不具合を検出させられるような実装を行うことが大事。

メリット

ビルド時に不具合を検出させることで、不具合修正まの時間を短縮できる。
テスト時に検出された不具合は発生箇所の確認が必要になるが、ビルドエラーの場合は発生個所が表示されるため、その分不具合修正に必要な時間が短縮される。

具体例

実装時に意識すべき例をいくつか紹介する。

文字列比較

文字列を比較するには比較演算子(==)を使うと良い。

private void CheckString(string str)
{
    bool isSame = false;

    if (str == "A")
    {
        isSame = true;
    }

    Console.WriteLine(isSame);
    // str="A"の場合、Trueが出力される
}

Equals()を使用して比較することも可能だが、比較演算子を使用すると、比較対象に文字列以外の型を指定した場合ビルドエラーで不具合を検出できる。

比較演算子を使用した場合
private void CheckString(string str)
{
    bool isSame = false;

    if (str == 1) // 文字列以外の型を指定した場合、この行でビルドエラーとなる
    {
        isSame = true;
    }

    Console.WriteLine(isSame);
}
Equalsを使用した場合
private void CheckString(string str)
{
    bool isSame = false;

    if (str.Equals(1)) // Equalsの場合、文字列以外の型を指定してもビルドエラーとならない
    {
        isSame = true;
    }

    Console.WriteLine(isSame);
    // str="1"の場合、Falseが出力される
}

文字列への変数埋め込み

文字列に変数を埋め込むには文字列補間式を使うと良い。

private void WriteString(string str)
{
    Console.WriteLine($"変数の値は{str}です。");
    // str="1"の場合、出力内容は「変数の値は1です。」
}

string.Format()によって変数を埋め込む方法も存在するが、文字列補間式を使用すると、変数の指定漏れが存在する場合ビルドエラーで不具合を検出できる。

文字列補間式を使用した場合
private void WriteString(string str)
{
    Console.WriteLine($"変数の値は{}です。"); // 変数を括弧内に指定していない場合、この行でビルドエラーとなる
}
string.Format()で埋め込む場合
private void WriteString(string str)
{
    Console.WriteLine(string.Format("変数の値は{0}です。")); // string.Format()で埋め込む場合、変数の指定漏れがあってもビルドエラーとならない
}

Discussion