...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

連想配列

会社で使うために作ったプログラムが急に動かなくなった.
ちゃんと仕様書にあり実装でも使われているのに管理システムでは未定義になっているエラーコードがあって,それが今回初めてそのシステムで検出されたらしい.
そのシステムで出力したらちょうどそのデータがすっぽり抜け落ちて空白になっていた.
自分で作ったプログラムでは,そのシステムが読み込んでいる外部設定ファイルをそのまま読み込んでいる.
だから,そんなバグがあるとは知らず,こんな処理を書いていた(たぶん).

class ErrorMap
{
    static char[uint] errorMap;
    static this()
    {
        // 外部設定ファイルから読み込んで連想配列に追加
        // foreach(...) {
        //     errorMap[errorCode] = errorName;
        // }
    }
    static char[] getErrorName(uint errorCode)
    {
        return errorMap[errorCode];
    }
}

登録されていないキーで連想配列にアクセスしてたから落ちたんだなっと.
そこでこう直した.

    // ...
    static char[] getErrorName(uint errorCode)
    {
        if (errorCode in errorMap)
            return errorMap[errorCode];
        else
        {
            msgBox("未定義のエラーコードが検出されました."); // dfl
            return "■未定義のエラーコード■";
        }
    }
}

なんだかいろいろな意味で使われている in 演算子を使って連想配列の中に登録済みかどうかを調べるようにした.
なかったらエラーメッセージを表示して,適当な戻り値を返すようにした.
よしよし.