@TiGü. Das scheint eine allgemeine Philosophische Diskussion zu sein.
Das glaube ich eher nicht. Es geht hier mehr darum, den Code robuster zu machen.
Was genau ist das Problem mit "with"? Was ist mit "Scope Problem" gemeint? Ist es ein Fehler der bei den Compilern auftritt oder ist es ein Fehler der beim Debuggen auftritt? Lässt sich das nachstellen?
Es tritt eben gar kein Fehler auf. Das Programm tut nur plötzlich was anderes.
Konkretes Beispiel, über das sicher viele hier gestolpert sind: Ein
TRect
hatte in früheren Delphi Versionen die Eigenschaften
Left
,
Top
,
Right
und
Bottom
. Wollte man nun z.B. in einer Methode ein Rechteck links auf die halbe Breite des aktuellen Forms setzen, konnte man das mit
Delphi-Quellcode:
with MyRect do begin
Left := Width div 2;
end;
erreichen. Da
Width
in
TRect
nicht bekannt ist, wird der nächsthöhere Scope (in diesem Fall das Form) verwendet.
Irgendwann bekam
TRect
aber noch ein Property
Width
spendiert, was dann innerhalb des with nun den Vorzug bekam. Alles compiliert immer noch einwandfrei, kein Fehler zur Laufzeit, aber das Ergebnis war ein völlig anderes.