Bereik van variabelen in OOP-service

Bereik van variabelen in OOP-service

> LeekScript-zelfstudie

Deze pagina is alleen geldig voor LS1.0, in LS1.1 zijn de klassen direct bruikbaar: Classes and Objects

In dit artikel zullen we pseudo-OOP (Object Oriented Programming) maken, aangezien LeekScript geen objectgeoriënteerde taal is. Eerst zal ik het begrip OOP introduceren, daarna zal ik uitleggen hoe variabel bereik werkt. Om niet te theoretisch te zijn, gaan we een structuur programmeren genaamd "Binary Search Tree", het is een structuur die is geoptimaliseerd voor geordend invoegen en zoeken.

Begrip van OOP

Dit begrip is erg belangrijk als je interesse begint te krijgen in andere talen zoals C (+/#), PHP, Java, etc. Het is een nieuwe manier om uw programma's te bouwen. Ze introduceert objecten. Je weet vast wel wat het is in het dagelijks leven, het is iets transformeerbaar/manipuleerbaars, maar bij programmeren noemen we "object" een structuur die bestaat uit variabelen en functies die '''attributen en methoden'' worden genoemd. Laten we het voorbeeld van een auto nemen, deze wordt gekenmerkt door een snelheid, een acceleratie (laten we ook niet in details treden) en acties zoals draaien, accelereren, remmen... Hier is hoe we onze auto zouden kunnen voorstellen:

Dit zorgt voor een gestructureerde en schone code. Maar ook om het gebruik van acties te vereenvoudigen die zijn samengesteld uit complexe instructies die voor de gebruiker worden verborgen. Een ander heel belangrijk ding in OOP is het principe van inkapseling... Alle attributen en methodes hoeven niet te worden gemanipuleerd door de gebruiker die het object zou kunnen "breken" als het dit en dat niet controleert dingen. Laten we ons voorstellen dat de gebruiker de snelheid van onze auto tijdens het spel aanpast en geen rekening houdt met traagheid of iets anders, de auto zou zich vreemd gedragen, en zelfs dit is slechts een kleine wijziging. Inkapseling is dus het principe om delen van het object onzichtbaar te maken voor de gebruiker, dit worden private attributen/methoden genoemd, integendeel als de gebruiker de mogelijkheid heeft om attributen/methoden te gebruiken, zijn deze publiek .

De definities van deze objecten worden "klassen" genoemd, ze worden gebruikt door een nieuwe instantie van de klasse te maken zoals bij een normaal type (getallen, arrays, strings...). Alleen is deze instantiëring in de meeste compilers (zo niet alle) impliciet: var a = 5; maakt een variabele van het nummerobject met de waarde '5'. Ik spreek van genummerde objecten door taalmisbruik. Een verschil met de OOP zijn de functies die op een variabele worden toegepast:

laat a = 1;

//Zonder OOP

optellen(a, 1); // gedefinieerd door functie (@obj, nbr) { obj += nbr; }

// OP

a.toevoegen(1); // gedefinieerd door methode add (nbr) { this += nbr; }

De functie 'toevoegen' heeft een getal nodig om als parameter toe te voegen. Het verschil tussen de twee versies is de context, in het eerste geval weet 'add' niet op welk object deze instructies moeten worden toegepast, het heeft een verwijzing naar dit nummer nodig (de 'obj' parameter). Terwijl het in de tweede functie een methode is. Het kent dus het object dat moet worden gewijzigd, aangezien 'add' bij 'a' hoort. Opmerking: De syntaxis is volledig willekeurig, u hoeft alleen het principe te begrijpen.

Ter informatie: 'toevoegen' is openbaar als u het volgt, aangezien de gebruiker de functie kan aanroepen.

Variabel bereik

Je hebt waarschijnlijk al globale variabelen gebruikt, ze stellen je in staat om informatie tussen rondes te bewaren en overal in je code toegang toe te hebben. Wat hen onderscheidt van "lokale" variabelen is hun "bereik". Neem de volgende code:

globaal _globaal;

functie scopeTest () { var lokaleFunctie; }

var lokaalHoofd;

Elk van de bovenstaande variabelen heeft een ander bereik: _global is overal toegankelijk op alle torens, localMain is alleen toegankelijk in het hoofdblok (niet in functies), localFunction is alleen toegankelijk in de functie "testScope". De scope is ook van toepassing op functies, inderdaad is scopeTest overal toegankelijk voor alle torens, terwijl een anonieme functie alleen toegankelijk is in de ruimte waar deze is gemaakt (zoals een variabele).

Het bereik van een variabele is van toepassing op alle blokken (bloksymbool: '{' en '}'). Dus een variabele gemaakt in een if, a while, a do/while, a for is daarbuiten niet toegankelijk:

als het klopt) { var localIf = 0;// Creatie van localIf } // einde levensduur van localIf

debuggen (lokaleAls); // Error: (localIf) onbekende variabele of functie

voor (var i = 0; i < 5; ++i) { // Creëer i