Hallo, ich versuche zu verstehen, wie ich mein Risiko in Bezug auf den lokalen Umfang der Funktionen am besten begrenzen kann. Nach meinem Verständnis bestehen meine Optionen zur Begrenzung des Potenzials, den Here-Bereich innerhalb einer Funktionsausführung zu verschmutzen, darin, entweder meine lokalen Variablen zu deklarieren oder Default Local zu verwenden. Allerdings hat jeder von ihnen einige Probleme:
Standardlokal:
- Das Referenzieren von Werten kann kontextabhängig sein, da Namen, die nicht lokal definiert wurden, auf Hier zurückgreifen, dann möglicherweise (wenn Names Default To Here deaktiviert ist) auf Global und dann auf die aktuelle Tabelle. Wie in der Dokumentation erwähnt, kann dies bedeuten, dass das Verhalten weniger vorhersehbar ist, da die Werte vom Kontext abhängen.
Explizite Erklärung:
- Das Referenzieren von Werten kann kontextabhängig sein, da Namen immer noch dieses Fallback-Verhalten verwenden, bis sie deklariert werden, wenn sie nicht in den lokalen Namen deklariert sind
- Zuweisungen können versehentlich in den Here-Bereich gelangen. Das heißt, wenn ein Name, der lokal sein soll, aus den lokalen Namensdeklarationen weggelassen wird, verunreinigt er den umgebenden Here-Bereich
- Im Allgemeinen ist diese nach außen gerichtete Verschmutzung schwer aufzuspüren.
- Wenn Sie beispielsweise eine Funktion in einem For aufrufen, in dem Sie "i" als Iterator verwenden und diese Funktion auch ein For hat, das i verwendet und es nicht als lokal deklariert, wirkt sich dies auf Ihre äußere For-Schleife aus. Zugegeben, das ist ein offensichtlicher Programmierfehler, aber er ist leicht zu machen und schwer zu debuggen.
Meiner Meinung nach wäre die ideale Option in der Lage, so etwas wie "Strict Local" zu deklarieren, das immer unqualifizierte Namen behandelt (sowohl beim Zuweisen von Werten als auch beim Referenzieren von Werten), da lokale und umgebende Bereiche nur mit qualifizierten Namen zugänglich wären. Dies würde es mir ermöglichen, nicht das Risiko einzugehen, umgebende Bereiche zu verschmutzen, und mich zwingen, anzugeben, wann ich von diesen Bereichen abhängig bin, und so die lokale Verschmutzung durch umgebende Bereiche zu begrenzen.