Ambito delle variabili nel servizio OOP

Ambito delle variabili nel servizio OOP

> Tutorial LeekScript

Questa pagina è valida solo per LS1.0, in LS1.1 le classi sono direttamente utilizzabili: Classes and Objects

In questo articolo, creeremo pseudo OOP (Programmazione orientata agli oggetti), poiché LeekScript non è un linguaggio orientato agli oggetti. In primo luogo, introdurrò la nozione di OOP, quindi spiegherò come funziona l'ambito variabile. Per non essere troppo teorici, programmeremo una struttura chiamata "Binary Search Tree", è una struttura ottimizzata per l'inserimento ordinato e la ricerca.

Nozione di OOP

Questa nozione è molto importante se inizi ad interessarti ad altri linguaggi come C (++/#), PHP, Java, ecc. È un nuovo modo di costruire i tuoi programmi. Introduce oggetti. Sicuramente sai cos'è nella vita di tutti i giorni, è qualcosa di trasformabile/manipolabile, ma in programmazione chiamiamo "oggetto" una struttura composta da variabili e funzioni chiamate '''attributi e metodi''.''. Prendiamo l'esempio di un'auto, è caratterizzata da una velocità, un'accelerazione (non entriamo neanche nei dettagli) oltre che da azioni come svoltare, accelerare, frenare... Ecco come potremmo rappresentare la nostra auto:

Ciò consente un codice strutturato e pulito. Ma anche per semplificare l'uso di azioni composte da istruzioni complesse che saranno nascoste all'utente. Un'altra cosa molto importante in OOP è il principio di incapsulamento... Tutti gli attributi e i metodi non devono essere manipolati dall'utente che potrebbe "rompere" l'oggetto se non controlla questo e quello cose. Immaginiamo che l'utente modifichi la velocità della nostra auto durante il gioco e non tenga conto dell'inerzia o altro, l'auto si comporterebbe in modo strano, e anche questa è solo una piccola modifica. L'incapsulamento è quindi il principio di rendere parti dell'oggetto invisibili all'utente, questo si chiama attributi/metodi privati, al contrario se l'utente ha la possibilità di utilizzare attributi/metodi, questi sono pubblici .

Le definizioni di questi oggetti sono chiamate "classi", vengono utilizzate creando una nuova istanza della classe come con un tipo normale (numeri, array, stringhe...). È solo che nella maggior parte dei compilatori (se non in tutti) questa istanza è implicita: var a = 5; crea una variabile dell'oggetto numero con il valore '5'. Parlo di oggetti numerati per abuso di linguaggio. Una differenza con l'OOP sono le funzioni applicate a una variabile:

sia a = 1;

//Senza OOP

aggiungi(a, 1); // definito dalla funzione (@obj, nbr) { obj += nbr; }

// OO

a.add(1); // definito dal metodo add (nbr) { this += nbr; }

La funzione 'aggiungi' richiede un numero da aggiungere come parametro. La differenza tra le due versioni è il contesto, nel primo caso 'add' non sa a quale oggetto applicare queste istruzioni, ha bisogno di un riferimento a questo numero (il parametro 'obj'). Mentre nella seconda funzione, è un metodo. Conosce quindi l'oggetto che deve essere modificato poiché 'add' appartiene ad 'a'. Nota: La sintassi è totalmente arbitraria, devi solo capire il principio.

Cordiali saluti, "aggiungi" è pubblico se lo segui poiché l'utente può chiamare la funzione.

Ambito variabile

Probabilmente hai già utilizzato le variabili globali, ti consentono di conservare le informazioni tra i round e di potervi accedere ovunque nel tuo codice. Ciò che le differenzia dalle variabili "locali" è il loro "ambito". Prendi il seguente codice:

globale _globale;

funzione scopeTest () { var funzione locale; }

var localMain;

Ognuna delle variabili di cui sopra ha uno scopo diverso: _global è accessibile ovunque su tutte le torri, localMain è accessibile solo nel blocco principale (non nelle funzioni), localFunction è accessibile solo nella funzione "testScope". Lo scope si applica anche alle funzioni, infatti scopeTest è accessibile a tutte le torri da ogni parte, mentre una funzione anonima è accessibile solo nello spazio in cui è stata creata (come una variabile).

L'ambito di una variabile si applica a tutti i blocchi ( simbolo di blocco: '{' e '}' ). Quindi una variabile creata in if, a while, a do/while, a for non è accessibile al di fuori di essa:

se è vero) { var localIf = 0;// Creazione di localIf } // fine vita di localIf

debug(localIf); // Errore: (localIf) variabile o funzione sconosciuta

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