LoginSignup
0
1

More than 5 years have passed since last update.

考察 > L_001...L_008書換えを自動処理で実装 > 2年後に処理部分を探すのに時間がかかる

Last updated at Posted at 2016-10-10
動作環境
C++ Builder XE4

Windowsソフトの実装において、コンポーネント名L_001, L_002, L_003など、自動的にインデックスを増加させながら表示したい項目があったとする。

処理としては以下のようなものを実装している。

float val;
for (int di=0; di < SMR_CALIB_XXX; di++) {
    val = line->Strings[SMR_XXX + di].ToDouble();
    name = L"L_" + IntToStr(measStat) + L"0" + IntToStr(di);
    p = (TLabel*)FindComponent(name);
    if (p != NULL) {
        switch(SMR_XXX + di) {
        default:
            p->Caption = UnicodeString().sprintf(L"%.1f", val);
            break;
        case SMR_XXX:
        case SMR_YYY:
        case SMR_ZZZ:
        case SMR_VVV:
            p->Caption = UnicodeString().sprintf(L"%.1f", val);
            break;
        }
    }
    p = NULL;
}

name = L"L_" + IntToStr(measStat) + L"0" + IntToStr(di);
により
L_001,L_002,...L_008などの名前を取得している。

問題点

  • 2年後にこのコードを変更することになった
  • L_001...L_008の部分から1つ項目を消すことになった

関連コードを探そうにもL_00Xで検索しても引っかからない。
5秒で該当場所にたどれない。

対応

案1. コメントを追加する

/* L_001などの項目を代入する */

L_001で検索時に5秒で見つかる。
将来の自分に感謝されるかも。
「コードの意図」を残しておく。

別案: ソース分割をうまくやっておく。2年後にそのソース構造を覚えていたら探しやすいかも。自分は記憶力が悪いので、たぶんソース構造は忘れているだろう。

別案: ソース構造のドキュメントを残す。ソースを変更のたびにそのドキュメントを更新する、というのをきちんとする限りは有効。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1