Delphi の定数定義
普通 Delphi で定数を定義する場合は
const
FOO = 100;
BAR = 200;
begin
const BAZ = 'リコリス'; // インライン定数宣言
end;
みたいにしますよね。
(大文字にするかどうかは別)
でも、あるまとまりを持った定数を定義したい場合があります。
例えば
const
CMD_FOO = 'foo';
CMD_BAR = 'bar';
CMD_BAZ = 'baz';
みたいな時です。
定数を record でグループ化
高度な recrod 型は class と同じようにメンバーとして定数を持てます。
それを利用して、こんな風に定数があるだけの record を定義できます。
type
TCMDConsts = record
public const
FOO = 'foo';
BAR = 'bar';
BAZ = 'baz';
end;
使う時は
if Foo = TCMDConsts.FOO then
Writeln('Command is foo');
のように、「レコード名.定数名」でアクセスできます。
グループ化されて解りやすい!
定数を一箇所にまとめる
定数が必要な時に都度 定数を宣言してもいいのですが、多人数で開発する場合「この定数どこで定義されてんねや!」ってなる事があります。
こういう場合は uConstants という Unit を作って、そこに全ての定数を定義すると見つけやすくなります。
その時に力を発揮するのがグループ化された定数です。
例えば
type
// フォームの定数
TFormConsts = record
public const
MAX_WIDTH = 1920; // 最大幅
MAX_HEIGHT = 1024; // 最大高さ
end;
// API コマンド
TAPICommandConsts = record
public const
LOGIN = 'login'; // ログイン
GET_INFO = 'getinfo.json'; // 情報取得
SET_AVATAR = 'setavatar'; // アバター設定
end;
の用にグループ化することで1つの Unit に定数がまとまっていても見やすくなります。
とはいえ、使うところと定義するところが離れてしまうので逆に解りづらい場合もあったり無かったり…
まとめ
定数をたくさん定義する場合、record 定数にしてみるのも1つの手です。