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_module
1.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.lua
ymodule2.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 module2
2.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.lua
que contenga las siguientes funciones:is_even(n)
: Devuelvetrue
sin
es par, de lo contrariofalse
.factorial(n)
: Devuelve el factorial den
.
-
Usa el módulo
utils
en 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 120
Ejercicio 2: Crear un Paquete de Matemáticas
-
Crea un paquete llamado
math_package
con 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_package
en 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.6666666666667
Conclusió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