La sintaxis de dos puntos
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 3 de 70.
Escribir counter.increment(counter) cada vez es tedioso y propenso a errores. Lua proporciona una forma más limpia: el operador de dos puntos (:).
Cuando defines una función usando dos puntos, Lua añade automáticamente self como el primer parámetro:
local player = {
name = "Hero"
}
-- Usando dos puntos en la definición
function player:greet()
print("Hello, I am " .. self.name)
endLos dos puntos también funcionan al llamar a la función. Pasan automáticamente la tabla como el primer argumento:
player:greet() -- Salida: Hello, I am HeroEsto es equivalente a escribir player.greet(player), pero mucho más limpio. Los dos puntos manejan el parámetro self en ambos extremos: durante la definición y durante la llamada.
Aquí hay una comparación que muestra que ambos enfoques producen resultados idénticos:
local counter = { value = 0 }
-- Sintaxis de punto (self explícito)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Sintaxis de dos puntos (self automático)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()La sintaxis de dos puntos es la forma estándar de definir y llamar métodos en Lua. Hace que tu código sea más corto y menos repetitivo.
Desafío
FácilCrea una tabla llamada greeter con un campo message inicializado con un valor que recibirás como entrada.
Añade un método :sayHello(name) utilizando la sintaxis de dos puntos que imprima el saludo en este formato:
[message], [name]!Recibirás dos entradas:
- El mensaje de saludo para almacenar en
greeter.message - Un nombre para pasar al método
:sayHello()
Define el método utilizando la sintaxis de dos puntos y llámalo utilizando la sintaxis de dos puntos. Imprime el saludo formateado.
Por ejemplo, si el mensaje es Welcome y el nombre es Luna, la salida debería ser:
Welcome, Luna!Hoja de referencia
El operador de dos puntos (:) proporciona una sintaxis más limpia para definir y llamar a métodos en Lua al manejar automáticamente el parámetro self.
Al definir una función con dos puntos, self se añade automáticamente como el primer parámetro:
function player:greet()
print("Hello, I am " .. self.name)
endAl llamar a una función con dos puntos, la tabla se pasa automáticamente como el primer argumento:
player:greet() -- Equivalent to player.greet(player)Comparación de la sintaxis de punto frente a la sintaxis de dos puntos:
-- Dot syntax (explicit self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Colon syntax (automatic self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()La sintaxis de dos puntos es la forma estándar de definir y llamar a métodos en Lua, lo que hace que el código sea más corto y menos repetitivo.
Pruébalo tú mismo
-- Leer entrada
local message = io.read()
local name = io.read()
-- TODO: Escribe tu código a continuación
-- 1. Crea una tabla llamada 'greeter' con un campo 'message'
-- 2. Añade un método :sayHello(name) usando la sintaxis de dos puntos
-- 3. Llama al método usando la sintaxis de dos puntos para imprimir el saludoEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas