Menu
Coddy logo textTech

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

Los 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 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 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.

challenge icon

Desafío

Fácil

Crea 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:

  1. El mensaje de saludo para almacenar en greeter.message
  2. 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)
end

Al 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 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 Object Oriented Programming