goo blog サービス終了のお知らせ 

LoveBeerのDelphi Blog

開発日誌

直値のmagic numberを撲滅

2008-01-28 18:38:59 | コード設計
タグ: マジックナンバー magic number const enum 列挙型

数値の範囲や、桁数、定数コードなど、ある数値や文字列に固有の意味を持たせてることはよくある。

SetLength(Values, 100);
for n := 0 to 99 do
  Values[n] := ...;

などの 99 もそう。

const や 列挙型 を使って、その意味に名前を付けるようにすると可読性、メンテナンス性に大きく貢献する。

(A) const を使う。
直値に名前を付ける。

const VALUES_SIZE = 100;

SetLength(Values, VALUES_SIZE);
for n := 0 to VALUES_SIZE - 1 do
  Values[n] := ...;

(B) 列挙型に明示的に値を指定する
magic number が0~255のときのみ有効。
type
  Size =(Small =5,Medium =10,Large =Small +Medium);

(C) 列挙型とconstの合わせ技
列挙型でつけた識別子に値を割り振る。
別のライブラリとの整合をとるときなどに便利。

type
  TAlignment = (taLeftJustify, taRightJustify, taCenter);

const
  Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);

var
  align: TAlignment;
  options: WORD;
begin
  align := taRightJustify;
  option := Alignments[align];
end;