Omfang av variabler i OOP-tjenesten

Omfang av variabler i OOP-tjenesten

> LeekScript-veiledning

Denne siden er kun gyldig for LS1.0, i LS1.1 er klassene direkte brukbare: Klasser og objekter

I denne artikkelen vil vi lage pseudo OOP (Object Oriented Programming), siden LeekScript ikke er et objektorientert språk. Først skal jeg introdusere begrepet OOP, så skal jeg forklare hvordan variabelt omfang fungerer. For ikke å være for teoretiske skal vi programmere en struktur som heter "Binary Search Tree", det er en struktur optimalisert for ordnet innsetting og søk.

Begrepet OOP

Denne ideen er veldig viktig hvis du begynner å interessere deg for andre språk som C (++/#), PHP, Java, etc. Det er en ny måte å bygge programmene dine på. Hun introduserer gjenstander. Du vet sikkert hva det er i hverdagen, det er noe transformerbart/manipulerbart, men i programmering kaller vi "objekt" en struktur som består av variabler og funksjoner kalt '''attributter og metoder''. ''. La oss ta eksemplet med en bil, den er preget av en hastighet, en akselerasjon (la oss heller ikke gå inn i detaljene) samt handlinger som å svinge, akselerere, bremse... Slik kan vi representere bilen vår:

Dette gir mulighet for en strukturert og ren kode. Men også for å forenkle bruken av handlinger sammensatt av komplekse instruksjoner som vil være skjult for brukeren. En annen veldig viktig ting i OOP er prinsippet om innkapsling... Alle attributter og metoder trenger ikke å bli manipulert av brukeren som kan "knekke" objektet hvis det ikke sjekker slikt og slikt tingene. La oss forestille oss at brukeren endrer hastigheten på bilen vår under spillet og ikke tar hensyn til treghet eller noe annet, bilen ville oppføre seg merkelig, og selv dette er bare en mindre modifikasjon. Innkapsling er derfor prinsippet om å gjøre deler av objektet usynlig for brukeren, dette kalles private attributter/metoder, tvert imot dersom brukeren har mulighet til å bruke attributter/metoder , er disse offentlige .

Definisjonene til disse objektene kalles "klasser", de brukes ved å lage en ny forekomst av klassen som med en normal type (tall, arrays, strenger...). Det er bare at i de fleste kompilatorer (om ikke alle) er denne instansieringen implisitt: var a = 5; oppretter en variabel av tallobjektet med verdien '5'. Jeg snakker om nummererte objekter ved misbruk av språk. En forskjell med OOP er funksjonene som brukes på en variabel:

la a = 1;

//Uten OOP

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

// OOP

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

'Legg til'-funksjonen krever et tall for å legge til som en parameter. Forskjellen mellom de to versjonene er konteksten, i det første tilfellet vet 'add' ikke hvilket objekt de skal bruke disse instruksjonene på, den trenger en referanse til dette nummeret ('obj'-parameteren). Mens i den andre funksjonen er det en metode. Den kjenner derfor objektet som må endres siden 'add' tilhører 'a'. Merk: Syntaksen er helt vilkårlig, du må bare forstå prinsippet.

FYI, 'legg til' er offentlig hvis du fulgte siden brukeren kan kalle funksjonen.

Variabelt omfang

Du har sannsynligvis allerede brukt globale variabler, de lar deg holde informasjon mellom rundene og for å kunne få tilgang til den hvor som helst i koden din. Det som skiller dem fra "lokale" variabler er deres "omfang". Ta følgende kode:

global _global;

function scopeTest () { var lokalFunksjon; }

var localMain;

Hver av variablene ovenfor har et annet omfang: _global er tilgjengelig overalt på alle tårn, localMain er kun tilgjengelig i hovedblokken (ikke i funksjoner), localFunction er kun tilgjengelig i "testScope"-funksjonen. Omfanget gjelder også for funksjoner, faktisk scopeTest er tilgjengelig for alle tårn fra overalt, mens en anonym funksjon kun er tilgjengelig i rommet der den ble opprettet (som en variabel).

Omfanget til en variabel gjelder for alle blokker ( blokksymbol: '{' og '}'). Dermed er en variabel opprettet i en if, a while, a do/while, a for ikke tilgjengelig utenfor den:

hvis sant) { var localIf = 0;// Oppretting av localIf } // slutten av levetiden til localIf

debug(localIf); // Feil: (localIf) ukjent variabel eller funksjon

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