Menu
Coddy logo textTech

«self» esplicito

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 2 di 70.

Quando una funzione si trova all'interno di una tabella, spesso deve accedere ai dati di quella stessa tabella o modificarli. Ma ecco il problema: come fa la funzione a sapere a quale tabella appartiene?

La soluzione consiste nel passare esplicitamente la tabella come primo argomento alla funzione. Per convenzione, questo parametro si chiama self:

local counter = {
    value = 0
}

function counter.increment(self)
    self.value = self.value + 1
end

counter.increment(counter)
print(counter.value)  -- Output: 1

Nota come chiamiamo counter.increment(counter), passando la tabella stessa come argomento. All'interno della funzione, self ora si riferisce a quella tabella, consentendoci di leggere e modificare self.value.

Questo schema è essenziale perché permette alla funzione di lavorare con i dati della tabella senza codificarne rigidamente il nome. Considera una funzione che azzera e restituisce il conteggio attuale:

function counter.reset(self)
    local old = self.value
    self.value = 0
    return old
end

print(counter.reset(counter))  -- Risultato: 1
print(counter.value)           -- Risultato: 0

Anche se passare la tabella manualmente funziona, può risultare ripetitivo. Nella prossima lezione imparerai una sintassi più pulita che gestisce tutto questo automaticamente.

challenge icon

Sfida

Facile

Crea una tabella chiamata tracker con un campo count inizializzato a 0.

Aggiungi una funzione tracker.addAmount(self, amount) che:

  • Accetta self (la tabella) come primo parametro
  • Accetta amount come secondo parametro
  • Aggiunge amount a self.count

Riceverai due input:

  1. Primo importo da aggiungere
  2. Secondo importo da aggiungere

Chiama tracker.addAmount due volte (una per ciascun input), passando ogni volta la tabella come primo argomento. Dopo entrambe le chiamate, stampa il valore finale di tracker.count.

Provalo tu

-- Leggi l'input
local amount1 = tonumber(io.read())
local amount2 = tonumber(io.read())

-- TODO: Scrivi il tuo codice qui sotto
-- Crea una tabella chiamata 'tracker' con un campo 'count' inizializzato a 0
-- Aggiungi una funzione tracker.addAmount(self, amount) che sommi amount a self.count
-- Chiama tracker.addAmount due volte, passando la tabella come primo argomento


-- Stampa il valore finale di count
print(tracker.count)
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online