Der Geltungsbereich definiert den Bereich, in dem Funktionen, Variablen usw. verfügbar sind. Die Verfügbarkeit einer Variablen wird beispielsweise durch den Kontext definiert, in dem sie definiert ist, d. h. durch die Funktion, die Datei oder das Objekt, in dem sie definiert ist. Wir nennen diese Variablen gewöhnlich lokale Variablen.
Der lexikalische Teil bedeutet, dass Sie den Anwendungsbereich aus dem Lesen des Quellcodes ableiten können.
Der lexikalische Geltungsbereich wird auch als statischer Geltungsbereich bezeichnet.
Der dynamische Geltungsbereich definiert globale Variablen, die nach ihrer Definition von überall her aufgerufen oder referenziert werden können. Manchmal werden sie auch als globale Variablen bezeichnet, obwohl globale Variablen in den meisten Programmiersprachen einen lexikalischen Geltungsbereich haben. Das bedeutet, dass aus dem Lesen des Codes abgeleitet werden kann, dass die Variable in diesem Kontext verfügbar ist. Vielleicht muss man einer uses- oder includes-Klausel folgen, um die Instatinierung oder Definition zu finden, aber der Code/Compiler kennt die Variable an dieser Stelle.
Beim dynamischen Scoping hingegen suchen Sie zuerst in der lokalen Funktion, dann in der Funktion, die die lokale Funktion aufgerufen hat, dann in der Funktion, die diese Funktion aufgerufen hat, und so weiter, den Aufrufstapel hinauf. "Dynamisch" bezieht sich auf Veränderungen, da der Aufrufstapel bei jedem Aufruf einer bestimmten Funktion anders sein kann, so dass die Funktion auf unterschiedliche Variablen treffen kann, je nachdem, von wo aus sie aufgerufen wird. (siehe aquí )
Ein interessantes Beispiel für einen dynamischen Geltungsbereich finden Sie unter aquí .
Für weitere Einzelheiten siehe aquí y aquí .
Einige Beispiele in Delphi/Object Pascal
Delphi hat lexikalischen Umfang.
unit Main;
uses aUnit; // makes available all variables in interface section of aUnit
interface
var aGlobal: string; // global in the scope of all units that use Main;
type
TmyClass = class
strict private aPrivateVar: Integer; // only known by objects of this class type
// lexical: within class definition,
// reserved word private
public aPublicVar: double; // known to everyboday that has access to a
// object of this class type
end;
implementation
var aLocalGlobal: string; // known to all functions following
// the definition in this unit
end.
Am nächsten kommt Delphi dem dynamischen Bereich mit dem Funktionspaar RegisterClass()/GetClass(). Für seine Verwendung siehe aquí .
Angenommen, der Zeitpunkt, zu dem RegisterClass([TmyClass]) aufgerufen wird, um eine bestimmte Klasse zu registrieren, kann nicht durch Lesen des Codes vorhergesagt werden (er wird in einer vom Benutzer aufgerufenen Schaltflächen-Klick-Methode aufgerufen); Code, der GetClass('TmyClass') aufruft, wird ein Ergebnis erhalten oder nicht. Der Aufruf von RegisterClass() muss nicht im lexikalischen Bereich der Einheit liegen, die GetClass() verwendet;
Eine weitere Möglichkeit für einen dynamischen Geltungsbereich sind anonyme Verfahren (Closures) in Delphi 2009, da sie die Variablen ihrer aufrufenden Funktion kennen. Sie folgen dem Aufrufpfad von dort aus nicht rekursiv und sind daher nicht vollständig dynamisch.
109 Stimmen
In Podcast 58 ermutigt Joel zu Fragen wie diesen, da er möchte, dass SO DER Ort für Antworten wird, auch wenn sie bereits an anderer Stelle beantwortet wurden. Dies ist eine berechtigte Frage, auch wenn man sie etwas höflicher formulieren könnte.
0 Stimmen
Und dann speziell de.wikipedia.org/wiki/Scope_(Programmierung) die ein schönes (Pascal/Delphi) Beispiel für verschachtelte Bereiche in verschachtelten Prozeduren enthält.
18 Stimmen
Es ist möglich, dass der Fragesteller nicht fließend Englisch spricht (oder sprach), als er diese Frage schrieb.
50 Stimmen
Die Frage ist höflich, er sagt einfach, was er will. Es steht Ihnen frei, zu antworten. Hier besteht kein Bedarf an überempfindlicher Höflichkeit.
38 Stimmen
Ich finde Fragen wie diese großartig, weil sie Inhalte für SO schaffen. IMO, wen kümmert es, wenn die Frage keine Mühe macht... die Antworten werden großartigen Inhalt haben und das ist es, was in diesem Forum zählt.
10 Stimmen
Ich stimme mit @Jwan622 überein, dass eine Frage nicht langatmig sein muss, um eine gute Frage zu sein.