Omfattning av variabler i OOP-tjänst

Omfattning av variabler i OOP-tjänst

> LeekScript handledning

Denna sida är endast giltig för LS1.0, i LS1.1 är klasserna direkt användbara: Klasser och objekt

I den här artikeln kommer vi att skapa pseudo OOP (Object Oriented Programming), eftersom LeekScript inte är ett objektorienterat språk. Först kommer jag att introducera begreppet OOP, sedan ska jag förklara hur variabel omfattning fungerar. För att inte vara för teoretiska ska vi programmera en struktur som heter "Binary Search Tree", det är en struktur optimerad för ordnad insättning och sökning.

Begreppet OOP

Denna uppfattning är mycket viktig om du börjar intressera dig för andra språk som C (++/#), PHP, Java, etc. Det är ett nytt sätt att bygga dina program. Hon introducerar föremål. Du vet säkert vad det är i vardagen, det är något transformerbart/manipulerbart, men i programmering kallar vi "objekt" en struktur som består av variabler och funktioner som kallas '''attribut och metoder''. ''. Låt oss ta exemplet med en bil, den kännetecknas av en hastighet, en acceleration (låt oss inte gå in på detaljerna heller) samt handlingar som att svänga, accelerera, bromsa... Så här skulle vi kunna representera vår bil:

Detta möjliggör en strukturerad och ren kod. Men också för att förenkla användningen av åtgärder som består av komplexa instruktioner som kommer att döljas för användaren. En annan mycket viktig sak i OOP är principen om inkapsling... Alla attribut och metoder behöver inte manipuleras av användaren som skulle kunna "bryta sönder" objektet om den inte kontrollerar sådant och sådant saker. Låt oss föreställa oss att användaren ändrar hastigheten på vår bil under spelet och inte tar hänsyn till tröghet eller något annat, bilen skulle bete sig konstigt, och även detta är bara en mindre modifiering. Inkapsling är därför principen att göra delar av objektet osynligt för användaren, detta kallas privat attribut/metoder, tvärtom om användaren har möjlighet att använda attribut/metoder så är dessa offentliga .

Definitionerna av dessa objekt kallas "klasser", de används genom att skapa en ny instans av klassen som med en normal typ (nummer, arrayer, strängar...). Det är bara det att i de flesta kompilatorer (om inte alla) är denna instansiering implicit: var a = 5; skapar en variabel för nummerobjektet med värdet '5'. Jag talar om numrerade föremål genom missbruk av språk. En skillnad med OOP är de funktioner som tillämpas på en variabel:

låt a = 1;

//Utan OOP

add(a, 1); // definieras av funktion (@obj, nbr) { obj += nbr; }

// OOP

a.add(1); // definieras av metoden add (nbr) { this += nbr; }

Funktionen 'lägg till' kräver ett nummer att lägga till som en parameter. Skillnaden mellan de två versionerna är sammanhanget, i det första fallet vet inte 'add' vilket objekt de ska tillämpa dessa instruktioner på, den behöver en referens till detta nummer (parametern 'obj'). Medan i den andra funktionen är det en metod. Den känner därför till objektet som måste modifieras eftersom 'add' tillhör 'a'. Obs: Syntaxen är helt godtycklig, du måste bara förstå principen.

FYI, 'lägg till' är offentligt om du följt eftersom användaren kan anropa funktionen.

Variabelt omfattning

Du har förmodligen redan använt globala variabler, de låter dig hålla information mellan omgångarna och att kunna komma åt den var som helst i din kod. Det som skiljer dem från "lokala" variabler är deras "omfattning". Ta följande kod:

global _global;

function scopeTest () { var localFunction; }

var localMain;

Var och en av variablerna ovan har olika omfattning: _global är tillgänglig överallt på alla torn, localMain är endast tillgängligt i huvudblocket (inte i funktioner), localFunction är endast tillgängligt i "testScope"-funktionen. Omfattningen gäller även för funktioner, faktiskt scopeTest är tillgänglig för alla torn från överallt, medan en anonym funktion endast är tillgänglig i det utrymme där den skapades (som en variabel).

Omfattningen av en variabel gäller för alla block (blocksymbol: '{' och '}'). Således är en variabel skapad i en if, a while, a do/while, a for inte tillgänglig utanför den:

om sant) { var localIf = 0;// Skapande av localIf } // end of life of localIf

debug(localIf); // Fel: (localIf) okänd variabel eller funktion

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