Tablas con funciones
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 1 de 70.
En Lua, las tablas son increíblemente versátiles. Más allá de almacenar datos, también pueden contener funciones. Esto te permite agrupar operaciones relacionadas, manteniendo tu código organizado y fácil de gestionar.
Para colocar una función dentro de una tabla, simplemente la asignas a una clave como cualquier otro valor:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Salida: Hello, AliceTambién puedes definir la función por separado y luego añadirla a la tabla:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endO usa esta sintaxis abreviada más limpia:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endLos tres enfoques producen el mismo resultado. Llamas a la función usando la notación de puntos: myTable.greet("Alice"). Este patrón de agrupar funciones con datos es la base de la programación orientada a objetos en Lua.
Desafío
FácilCrea una tabla llamada calculator que contenga cuatro funciones aritméticas:
add(a, b)- devuelve la suma deaybsubtract(a, b)- devuelveamenosbmultiply(a, b)- devuelve el producto deaybdivide(a, b)- devuelveadividido porb
Recibirás tres entradas:
- Un nombre de operación (uno de:
add,subtract,multiply,divide) - Primer número
- Segundo número
Llama a la función apropiada de tu tabla calculator basándote en el nombre de la operación e imprime el resultado.
Hoja de referencia
En Lua, las tablas pueden almacenar funciones junto con datos. Para agregar una función a una tabla, asígnela a una clave:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Salida: Hello, AliceTambién puede definir funciones por separado y agregarlas a la tabla:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endO use la sintaxis abreviada:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endLlame a las funciones de la tabla usando la notación de puntos: myTable.greet("Alice")
Pruébalo tú mismo
-- Leer entradas
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
-- TODO: Crear una tabla calculator con cuatro funciones:
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
-- TODO: Llamar a la función apropiada de la tabla calculator usando el nombre de la operación
-- e imprimir el resultadoEsta 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