One man’s constant is another man’s variable. (Alan Perlis)
Eine Konstante ist eine Variable, deren Wert sich zur Laufzeit nicht ändert. In einem neuen Release, sprich einer anderen Version des Quelltexts, ist es nicht ungewöhnlich, dass sich der Wert ändert. Beispiel: Erstmal ist 3.14 ein akzeptabler Wert für Pi. Später will man es genauer haben, 3.1415926.
Lotus Script ziert sich immer, den neuen Wert zu akzeptieren. Die Erbauer der Plattformen scheinen bei dem Wort “Konstante” mehr an Coulomb und Planck gedacht zu haben statt an Perlis.
So kann jeder es nachvollziehen, der Lotus Script programmiert:
- Erzeuge eine ScriptLib “Konstanten”, darin Public Const FOO = “Bar”
- Erzeuge in derselben Datenbank eine ScriptLib “Client”, die
“Konstanten” einbindet und darin eine Klasse, die den Wert von FOO druckt. - Erzeuge einen Agenten, der die FOO-Wert-druckende Klasse nutzt.
- Starte den Agenten. Ergebnis: Es wird “Bar” auf die Konsole gedruckt. So weit prima.
- Ändere den Wert zu “Bar2″.
- Starte den Agenten. Ergebnis: Es wird weiterhin “Bar” gedruckt.
Abhilfe: Projekt bereiningen und komplett neu kompilieren.
Immer alles duchzukompilieren kann reichlich nervig sein. Und fehleranfällig ist es, denn höchstwahrscheinlich vergißt man eine vererbte Bibliothek, die es nötig hat.
Durch diesen Kniff kann man es umgehen:
Nutze nicht “Public Const”, um Konstanten zu definieren, sondern
“Public Property Get FOO As String”. Was ist eine Konstante? Eine Read-only-Variable. Also eine Eigenschaft mit Getter und ohne Setter.
Schmankerl: Bestehender Code kann einfach umgearbeitet werden, weil der lesende Zugriff auf die Property aufrufkompatibel ist mit dem Zugriff auf die Konstante.