Verweis: | Break Exit |
Uses: | StdCtrls |
Eingabe: | Hilfswert:Integer; |
Ausgabe: | Eine gewünschte Operation des Hilfswertes. |
Funktion: | Der Hilfswert gilt als Ersatz für eine nichtsagende Globale Variable. |
Beispiel 1
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie zwei TLabel und einen TButton auf die Form. Erstellen Sie ein OnClick-Ereignis bei TButton.
procedure TForm1.Button1Click(Sender: TObject);
Var
f:Integer;
begin
If Tag=0 then f:=0;
Tag:=Tag+1;
f := f+1;
Label1.Caption := 'Tag = ' + (IntToStr(tag));
Label2.Caption := 'f = ' + (IntToStr(f));
Button1.Caption := (IntToStr(Button1.Tag));
end;
Die Variable Tag ist eine Integer-Hilfs-Variable die jeder Komponente zur Verfügung steht. Sie fungiert innerhalb eines Formulars al Globale Variable. Diese Variable ist a) nicht so aussagekräftig und b) nur für die Form. Normalerweise Schreibt man globale Variablen in den Kopf eines Quelltextes oder lagert diese in eine Unit aus. Hier werden die Gültigkeiten und Funktionsweisen mit Kommentaren beschrieben. Dies wäre sauberer und verständlicher Programmierstil. Wenn sie aber diese Variable nur temporär für eine Funktion brauchen, dann würden Sie den Programmkopf mit unnötigem Ballast füllen. Hierfür reicht tag aus.
Der Quelltext
Wenn ich wie in dem Beispiel eine Integer-Variable mit dem Namen f als Zähl-Variable deklariere, dann muss ich Sie sicherheitshalber auf 0 stellen. Bei Die Varable Tag ist beim Entstehen des Objekts auf Null gestellt worden. Mit der Zeile:
If Tag=0 then f:=0;
Nun stellen wir nur beim ersten Aufruf die Variable f auf 0. dann zählen wir beide Variablen um 1 hoch. Wir lassen uns den Wert von Tag in Label1 anzeigen und den wert von f in Label2. Nun möchten wir noch den Wert von Button1.tag auf dem Schalter angezeigt bekommen. Nach einigen Klicks haben wir folgendes Bild:

Was ist passiert ? Warum wird f nicht weiter hochgezählt ? Die Lösung ist sehr einfach nach dem Initialisieren auf 0 und dem Hochzählen um 1 ist f in Vergessenheit geraten. Denn Die Variable ist nur für den Moment in dem wir uns in dem OnClick-Ereignisses von Button1 befinden, gültig. so ist f vielleicht wieder null und wird bei jedem Aufruf auf 1 erhöht. Aber eben nicht weiter.
Achtung Tag-Zuornung
Eine weitere Gefahr besteht in der Zuordnung der Tag – Variable. Da jede Komponente ein eine Hilfsvariable „Tag“ hat, kann es hier schnell zu Verwechselungen kommen. Wer im Beispiel glaubte, dass die Tag-Variable zu Button1 gehört der hat sich getäuscht. Den Beweis liefert die letzte Zeile unseres Quelltextes. Hier steht der Wert von Button.Tag immer noch auf 0. Label1 und Label2 haben auch einen Tag, aber der wurde auch nicht hochgezählt. Es wurde hier der Tag von Form1 hochgezählt. Wer mehr Klarheit im Quelltext haben will, der möge statt „Tag“ „Form1.Tag“ schreiben. Die Funktion bleibt hierbei gleich.
Zur IDE
Die Lazarus IDE ist schon ziemlich schlau, aber sie bemerkt nicht alles. So wurde In unserem Quelltext auch keine Warnung aus gegeben. Wenn Sie mal die Zeile:
If Tag=0 then f:=0;
Mit „//“ in eine Kommentarzeile verwandeln, dann bekommen Sie folgendes zu Gesicht.

Das Warnschild vor Zeile 40 zeigt uns an das f nicht initialisiert wurde. Daher weist uns die IDE daraufhin, dass der Wert unbestimmt ist. Dies ist er aber auch mit unserer auskommentierten Zeile. Daher ist die IDE-Hilfestellung gut, aber man sollte sich nicht nur hierauf verlassen.