Gültigkeitsbereich von Variablen im OOP-Dienst

Umfang der Variablen im OOP-Dienst

> LeekScript-Tutorial

Diese Seite gilt nur für LS1.0, in LS1.1 sind die Klassen direkt nutzbar: Classes and Objects

In diesem Artikel erstellen wir Pseudo-OOP (Objektorientierte Programmierung), da LeekScript keine objektorientierte Sprache ist. Zuerst stelle ich den Begriff OOP vor und erkläre dann, wie der Gültigkeitsbereich von Variablen funktioniert. Um nicht zu theoretisch zu sein, programmieren wir eine Struktur namens "Binary Search Tree", eine Struktur, die für geordnetes Einfügen und Suchen optimiert ist.

Begriff von OOP

Dieser Begriff ist sehr wichtig, wenn Sie anfangen, sich für andere Sprachen wie C (++/#), PHP, Java usw. zu interessieren. Es ist eine neue Art, Ihre Programme zu erstellen. Sie stellt Objekte vor. Sie wissen sicherlich, was es im Alltag ist, es ist etwas Transformierbares/Manipulierbares, aber in der Programmierung nennen wir „Objekt“ eine Struktur, die aus Variablen und Funktionen besteht, die „Attribute und Methoden“ genannt werden. Nehmen wir das Beispiel eines Autos, es zeichnet sich durch eine Geschwindigkeit, eine Beschleunigung (auf die wir auch nicht ins Detail gehen) sowie Aktionen wie Wenden, Beschleunigen, Bremsen... So könnten wir unser Auto darstellen:

Dies ermöglicht einen strukturierten und sauberen Code. Aber auch, um die Verwendung von Aktionen zu vereinfachen, die aus komplexen Anweisungen bestehen, die dem Benutzer verborgen bleiben. Eine weitere sehr wichtige Sache in OOP ist das Prinzip der Kapselung... Alle Attribute und Methoden müssen nicht vom Benutzer manipuliert werden, der das Objekt "brechen" könnte, wenn es das und das nicht prüft Dinge. Stellen wir uns vor, dass der Benutzer die Geschwindigkeit unseres Autos während des Spiels ändert und keine Trägheit oder etwas anderes berücksichtigt, das Auto würde sich seltsam verhalten, und selbst dies ist nur eine geringfügige Änderung. Kapselung ist also das Prinzip, Teile des Objekts für den Benutzer unsichtbar zu machen, dies nennt man private Attribute/Methoden, hat der Benutzer dagegen die Möglichkeit, Attribute/Methoden zu verwenden, sind diese öffentlich .

Die Definitionen dieser Objekte werden "Klassen" genannt, sie werden verwendet, indem eine neue Instanz der Klasse wie bei einem normalen Typ (Zahlen, Arrays, Strings ...) erstellt wird. Es ist nur so, dass diese Instantiierung in den meisten Compilern (wenn nicht allen) implizit ist: var a = 5; erstellt eine Variable des Zahlenobjekts mit dem Wert '5'. Ich spreche von nummerierten Objekten durch Sprachmissbrauch. Ein Unterschied zur OOP sind die auf eine Variable angewendeten Funktionen:

sei a = 1;

//Ohne OOP

add(a, 1); // definiert durch Funktion (@obj, nbr) { obj += nbr; }

// Hoppla

a.add(1); // definiert durch Methode add (nbr) { this += nbr; }

Die 'add'-Funktion nimmt eine hinzuzufügende Zahl als Parameter. Der Unterschied zwischen den beiden Versionen ist der Kontext, im ersten Fall weiß 'add' nicht, auf welches Objekt diese Anweisungen angewendet werden sollen, es benötigt eine Referenz auf diese Nummer (den 'obj'-Parameter). Während es sich bei der zweiten Funktion um eine Methode handelt. Es kennt daher das zu ändernde Objekt, da 'add' zu 'a' gehört. Hinweis: Die Syntax ist völlig willkürlich, man muss nur das Prinzip verstehen.

FYI, 'add' ist öffentlich, wenn Sie gefolgt sind, da der Benutzer die Funktion aufrufen kann.

Variablenbereich

Sie haben wahrscheinlich bereits globale Variablen verwendet, sie ermöglichen es Ihnen, Informationen zwischen den Runden aufzubewahren und überall in Ihrem Code darauf zuzugreifen. Was sie von "lokalen" Variablen unterscheidet, ist ihr "Geltungsbereich". Nehmen Sie den folgenden Code:

global _global;

FunktionsumfangTest () { var lokale Funktion; }

var localMain;

Jede der obigen Variablen hat einen anderen Geltungsbereich: _global ist überall auf allen Türmen zugänglich, localMain ist nur im Hauptblock zugänglich (nicht in Funktionen), localFunction ist nur in der Funktion "testScope" zugänglich. Der Gültigkeitsbereich gilt auch für Funktionen, tatsächlich ist scopeTest für alle Türme von überall aus zugänglich, während eine anonyme Funktion nur in dem Bereich zugänglich ist, in dem sie erstellt wurde (wie eine Variable).

Der Geltungsbereich einer Variablen gilt für alle Blöcke (Blocksymbol: '{' und '}' ). Daher ist eine Variable, die in if, a while, do/while, a for erstellt wurde, außerhalb davon nicht zugänglich:

Wenn wahr) { var localIf = 0; // Erstellung von localIf } // Lebensende von localIf

debug(localIf); // Fehler: (localIf) unbekannte Variable oder Funktion

for (var i = 0; i < 5; ++i) { // i erstellen