Eb hat geschrieben:Wenn es dir also nicht ausmachen würde, den Grundgedanken zu erklären, könnte ich mich dann wieder mit dem Code befassen und eventuell auch noch einen positiven Lerneffekt erzielen.
Das Ziel ist es, Variablen dort zu deklarieren, wo sie benötigt werden. Sie sollen in anderen Programmteilen nicht sichbar sein.
Wenn sich eine Prozedur einen Wert aus der letzten Ausführung merken soll, kann man dazu lokale typisierte Konstanten verwenden. Typisierte Konstanten verhalten sich viel mehr wie Variablen, das heißt man kann ihnen zur Laufzeit neue Werte zuweisen. Der Wert bleibt über den Aufruf der Prozedur hinaus erhalten und kann später wieder abgefragt werden. Der Vorteil ist: die typisierte Konstante ist nur in dieser Prozedur sichtbar. Sie kann daher von außen nicht für andere Dinge misbraucht werden.
Ist eine Initialisierung erforderlich bietet sich die Schachtelung an. Die äußere Prozedur enthält die Variable, in der der Wert gemerkt wird. Befor der Prozedurrumpf (
begin ... end) beginnt, deklariert man noch eine (die innere) Prozedur. Diese kann auf alle Variablen (und ggf. andere Prozeduren/Funktionen) der äußeren Prozedur zugreifen,
die bereits deklariert wurden. Man kann nach der inneren Prozdur einen weiteren
var-Block einleiten, dann aber nicht mehr von der inneren Prozedur auf die dort deklarierten Variablen zugreifen.
Einfacher zu lesen wäre, wenn man den zu merkenden Wert per Parameter übergibt. Dann muss sich die aufrufenden Prozedur um das zwischenspeichern des Wertes kümmern.
Code: Alles auswählen
procedure myproc(arg1, arg2: Integer; var arg3: Integer);
begin
arg3 := arg1 + arg2; // Änderungen an arg3 sind dank var in der aufrufenden Prozedur sichtbar
end;
Solltest man zu dem Punkt kommen, dass eine Prozedur mehrere Werte zwischenspeichern muss, darf man ernsthaft an objektorientierung denken. Ein Kernkonzept dessen ist es, Daten und zugehörigen Programmcode zusammen zu halten.