Code: Alles auswählen
procedure TForm1.FormActivate(Sender: TObject);
const first: boolean = true;
begin
writeln('FormActivate');
if not first then exit;
first:=false;
writeln('DoSomething');
end;
Denn warum darf man einer Konstante einen Wert zuweisen und warum funktioniert das Konstrukt, denn es wird anstandslos kompiliert.
Beim Nachforschen bin ich auf folgendes gestoßen:
Die Zuweisung `first := false;` funktioniert, weil `first` nicht nur eine Konstante ist, sondern auch eine lokale Variable. Die `const`-Deklaration `const first: boolean = true;` initialisiert die Variable `first` beim kompilieren nur einmal mit dem Wert `true`, aber sie macht sie nicht unveränderlich.
Die `const`-Deklaration wird jedoch ignoriert, und die Variable `first` bleibt eine normale Variable.
Der Geltungsbereich von 'first' scheint auch auf die Prozedur beschränkt zu sein.
Um das gleiche zu erreichen hätte ich eine Variable in der Unit definiert und sie im FormCreate Initialisiert.
Das Konstrukt ist also wohl eine elegante Ausreizung der Sprachmöglichkeiten mit besserer Lesbarkeit - oder gibt es dazu andere Meinungen?