Menu
Coddy logo textTech

'self' explícito

Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy — lección 2 de 70.

Cuando una función reside dentro de una tabla, a menudo necesita acceder o modificar datos dentro de esa misma tabla. Pero aquí está el problema: ¿cómo sabe la función a qué tabla pertenece?

La solución es pasar explícitamente la tabla como el primer argumento a la función. Por convención, este parámetro se llama self:

local counter = {
    value = 0
}

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

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

Observa cómo llamamos a counter.increment(counter), pasando la propia tabla como argumento. Dentro de la función, self ahora se refiere a esa tabla, lo que nos permite leer y modificar self.value.

Este patrón es esencial porque permite que la función trabaje con los datos de la tabla sin incluir de forma fija el nombre de la tabla. Considere una función que reinicia y devuelve el conteo actual:

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

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

Aunque pasar la tabla manualmente funciona, puede resultar repetitivo. En la siguiente lección, aprenderás una sintaxis más limpia que maneja esto automáticamente.

challenge icon

Desafío

Fácil

Crea una tabla llamada tracker con un campo count inicializado en 0.

Agrega una función tracker.addAmount(self, amount) que:

  • Acepte self (la tabla) como el primer parámetro
  • Acepte amount como el segundo parámetro
  • Sume amount a self.count

Recibirás dos entradas:

  1. Primera cantidad a sumar
  2. Segunda cantidad a sumar

Llama a tracker.addAmount dos veces (una por cada entrada), pasando la tabla como el primer argumento cada vez. Después de ambas llamadas, imprime el valor final de tracker.count.

Pruébalo tú mismo

-- Leer entrada
local amount1 = tonumber(io.read())
local amount2 = tonumber(io.read())

-- TODO: Escribe tu código a continuación
-- Crea una tabla llamada 'tracker' con un campo 'count' inicializado en 0
-- Añade una función tracker.addAmount(self, amount) que sume amount a self.count
-- Llama a tracker.addAmount dos veces con la tabla como primer argumento


-- Mostrar el conteo final
print(tracker.count)
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