const部に関数を宣言する

Stack Overflow内のConst function in Delphiを簡単に訳してまとめてみた。



質問は、

const
    function1: function(const S: String): String = SomeVariable1;

は何をしていて、何のために書かれているのか。というもの。


何をしているのか

普通、定数は

const
    Pi = 3.1415;
    s  = 'This is example';

のように記述されるが、

const
    Pi: Extended = 3.1415;

のようなtyped constantsもある。

なので上の例では
function1に"function(const S: String): String"型のSomeVariable1関数を割り当てていることになる。

※ このとき、SomeVariable1はconst宣言より前に定義されていなければならない。

//例.
function SomeVariable1(const S: String): String;
begin
  result := S + '!';
end;

const
  function1: function(const S: String): String = SomeVariable1;


何のためなのか

2つの理由が考えられる。
1. コードが{$J+}*1(型付き定数を割り当て可能)で書かれていて、「定数」はどこかで別の値が割り当てられている*2。もしfunction1がvariableとして宣言されていたら、ユニットのinitialization部で初期化されなければならないが、他のユニットのinitialization部が先に実行されて、その中でfunction1「関数」がよばれているかもしれないことを考えるとそれでは遅すぎる。

2. 関数名をfunction1からSomeVariable1に変更したが、容易に変更できないサードパーティのコードがあるため、エイリアスを宣言するワンライナーとして使っている。*3

*1:J言語か?

*2:この文はよくわからなかった

*3:質問者によれば今回は2つ目の理由だったようだ