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