13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Delphi] グループ化された定数の定義

Last updated at Posted at 2022-08-25

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つの手です。

13
7
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
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?