En este módulo, aprenderemos sobre los módulos y paquetes en Lua, que son fundamentales para organizar y reutilizar el código de manera eficiente. Los módulos permiten dividir el código en partes más manejables y reutilizables, mientras que los paquetes facilitan la distribución y el uso de bibliotecas de terceros.
- ¿Qué es un Módulo?
Un módulo en Lua es simplemente un archivo que contiene código Lua y que puede ser cargado y utilizado en otros scripts. Los módulos permiten encapsular funcionalidades específicas y reutilizarlas en diferentes partes de un programa.
1.1. Creación de un Módulo
Para crear un módulo, simplemente escribimos el código en un archivo y lo retornamos como una tabla. Aquí hay un ejemplo de un módulo simple que proporciona funciones matemáticas básicas:
-- math_module.lua
local math_module = {}
function math_module.add(a, b)
return a + b
end
function math_module.subtract(a, b)
return a - b
end
return math_module1.2. Uso de un Módulo
Para usar un módulo en otro script, utilizamos la función require. Aquí hay un ejemplo de cómo usar el módulo math_module que creamos anteriormente:
-- main.lua
local math_module = require("math_module")
local sum = math_module.add(5, 3)
local difference = math_module.subtract(5, 3)
print("Sum: " .. sum) -- Output: Sum: 8
print("Difference: " .. difference) -- Output: Difference: 2
- Paquetes
Un paquete en Lua es una colección de módulos que se agrupan y distribuyen juntos. Los paquetes facilitan la distribución de bibliotecas de terceros y la gestión de dependencias.
2.1. Estructura de un Paquete
Un paquete generalmente tiene una estructura de directorios que organiza los módulos de manera lógica. Aquí hay un ejemplo de la estructura de un paquete:
init.lua: Este archivo se ejecuta cuando se carga el paquete y puede inicializar el paquete o cargar otros módulos.module1.luaymodule2.lua: Estos son módulos individuales que forman parte del paquete.
2.2. Creación de un Paquete
Vamos a crear un paquete llamado my_package con dos módulos: module1 y module2.
-- my_package/init.lua
local my_package = {}
my_package.module1 = require("my_package.module1")
my_package.module2 = require("my_package.module2")
return my_package-- my_package/module1.lua
local module1 = {}
function module1.greet()
return "Hello from Module 1"
end
return module1-- my_package/module2.lua
local module2 = {}
function module2.greet()
return "Hello from Module 2"
end
return module22.3. Uso de un Paquete
Para usar el paquete my_package, simplemente lo requerimos en nuestro script principal:
-- main.lua
local my_package = require("my_package")
print(my_package.module1.greet()) -- Output: Hello from Module 1
print(my_package.module2.greet()) -- Output: Hello from Module 2
- Ejercicios Prácticos
Ejercicio 1: Crear un Módulo de Utilidades
-
Crea un módulo llamado
utils.luaque contenga las siguientes funciones:is_even(n): Devuelvetruesines par, de lo contrariofalse.factorial(n): Devuelve el factorial den.
-
Usa el módulo
utilsen un script principal para verificar si un número es par y calcular el factorial de un número.
Solución:
-- utils.lua
local utils = {}
function utils.is_even(n)
return n % 2 == 0
end
function utils.factorial(n)
if n == 0 then
return 1
else
return n * utils.factorial(n - 1)
end
end
return utils-- main.lua
local utils = require("utils")
local number = 5
print("Is " .. number .. " even? " .. tostring(utils.is_even(number))) -- Output: Is 5 even? false
print("Factorial of " .. number .. " is " .. utils.factorial(number)) -- Output: Factorial of 5 is 120Ejercicio 2: Crear un Paquete de Matemáticas
-
Crea un paquete llamado
math_packagecon dos módulos:basic.lua: Contiene funciones para suma y resta.advanced.lua: Contiene funciones para multiplicación y división.
-
Usa el paquete
math_packageen un script principal para realizar operaciones matemáticas básicas y avanzadas.
Solución:
-- math_package/init.lua
local math_package = {}
math_package.basic = require("math_package.basic")
math_package.advanced = require("math_package.advanced")
return math_package-- math_package/basic.lua
local basic = {}
function basic.add(a, b)
return a + b
end
function basic.subtract(a, b)
return a - b
end
return basic-- math_package/advanced.lua
local advanced = {}
function advanced.multiply(a, b)
return a * b
end
function advanced.divide(a, b)
if b == 0 then
error("Division by zero")
end
return a / b
end
return advanced-- main.lua
local math_package = require("math_package")
print("Addition: " .. math_package.basic.add(5, 3)) -- Output: Addition: 8
print("Subtraction: " .. math_package.basic.subtract(5, 3)) -- Output: Subtraction: 2
print("Multiplication: " .. math_package.advanced.multiply(5, 3)) -- Output: Multiplication: 15
print("Division: " .. math_package.advanced.divide(5, 3)) -- Output: Division: 1.6666666666667Conclusión
En esta sección, hemos aprendido cómo crear y usar módulos y paquetes en Lua. Los módulos nos permiten organizar y reutilizar el código de manera eficiente, mientras que los paquetes facilitan la distribución y el uso de bibliotecas de terceros. Con estos conocimientos, estarás mejor preparado para estructurar tus proyectos Lua de manera más modular y mantenible. En el próximo módulo, exploraremos el manejo de errores en Lua.
Curso de Programación en Lua
Módulo 1: Introducción a Lua
Módulo 2: Conceptos Básicos
Módulo 3: Conceptos Intermedios
Módulo 4: Conceptos Avanzados
- Corutinas
- Programación Orientada a Objetos en Lua
- Técnicas de Depuración
- Optimización del Rendimiento
- Uso de la API C de Lua
Módulo 5: Aplicaciones Prácticas
- Construcción de un Juego Simple
- Scripting en Motores de Juegos
- Automatización de Tareas con Lua
- Integración de Lua con Otros Lenguajes
