La sintassi dei due punti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 3 di 70.
Scrivere counter.increment(counter) ogni volta è noioso e soggetto a errori. Lua offre un modo più semplice: l’operatore due punti (:).
Quando definisci una funzione usando i due punti, Lua aggiunge automaticamente self come primo parametro:
local player = {
name = "Hero"
}
-- Uso dei due punti nella definizione
function player:greet()
print("Hello, I am " .. self.name)
endI due punti funzionano anche quando chiami la funzione. Passano automaticamente la tabella come primo argomento:
player:greet() -- Output: Hello, I am HeroQuesto equivale a scrivere player.greet(player), ma è molto più pulito. I due punti gestiscono il parametro self da entrambe le parti: durante la definizione e durante la chiamata.
Ecco un confronto che mostra entrambi gli approcci produrre risultati identici:
local counter = { value = 0 }
-- Sintassi con il punto (self esplicito)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Sintassi con i due punti (self automatico)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()La sintassi con i due punti è il modo standard per definire e chiamare i metodi in Lua. Rende il codice più breve e meno ripetitivo.
Sfida
FacileCrea una tabella chiamata greeter con un campo message inizializzato con un valore che riceverai come input.
Aggiungi un metodo :sayHello(name) usando la sintassi con i due punti che stampa il saluto in questo formato:
[message], [name]!Riceverai due input:
- Il messaggio di saluto da memorizzare in
greeter.message - Un nome da passare al metodo
:sayHello()
Definisci il metodo usando la sintassi con i due punti e chiamalo usando la sintassi con i due punti. Stampa il saluto formattato.
Per esempio, se il messaggio è Welcome e il nome è Luna, l'output dovrebbe essere:
Welcome, Luna!Provalo tu
-- Leggi l'input
local message = io.read()
local name = io.read()
-- TODO: Scrivi il tuo codice qui sotto
-- 1. Crea una tabella chiamata 'greeter' con un campo 'message'
-- 2. Aggiungi un metodo :sayHello(name) usando la sintassi con i due punti
-- 3. Chiama il metodo usando la sintassi con i due punti per stampare il salutoQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle formeEsercitati da solo: Compilatore Lua online