Menu
Coddy logo textTech

La sintaxis de dos puntos

Parte de la sección Programación Orientada a Objetos 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 colon (:).

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)
end

El signo de dos puntos también funciona al llamar a la función. Pasa automáticamente la tabla como el primer argumento:

player:greet()  -- Salida: Hello, I am Hero

Esto 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 ambos enfoques produciendo 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.

challenge icon

Desafío

Fácil

Crea una tabla llamada greeter con un campo message inicializado con el 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:

  1. El mensaje de saludo para almacenar en greeter.message
  2. Un nombre para pasar al método :sayHello()

Define el método usando la sintaxis de dos puntos y llámalo usando 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!

Pruébalo tú mismo

-- Leer entrada
local message = io.read()
local name = io.read()

-- TODO: Escribe tu código debajo
-- 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 saludo
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos