/

Lenguaje de programación Lua: guía para principiantes

por Team Ninja
An image of the Lua logo for the blog Lua Programming Language: A Beginner's Guide
An image of the Lua logo for the blog Lua Programming Language: A Beginner's Guide

Prueba nuestro software de gestión de endpoints n.º 1 en G2

Sin necesidad de tarjeta de crédito, acceso completo a todas las funciones.

Webinar

Actualizaciones de NinjaOne 12.0: todo lo que necesitas saber

Automatiza las aspectos más complejos de la TI

Puntos clave

  • ¿Por qué aprender Lua? Lua es ligero, rápido y fácil de integrar en otras aplicaciones, lo que lo convierte en una opción ideal para el desarrollo de videojuegos, el IoT, el scripting y la automatización.
  • Primeros pasos: instala Lua en Windows, macOS o Linux, prepara tu entorno de desarrollo con cualquier editor de texto y ejecuta tu primer programa con «lua hello.lua».
  • Conceptos básicos: conoce la sintaxis limpia de Lua, sus tablas flexibles, las funciones reutilizables y su compatibilidad con la programación procedimental, orientada a objetos y funcional.
  • Siguiente nivel: explora los módulos, la gestión de errores, las metatablas, las corrutinas y la integración con C/C++ para crear sistemas basados en Lua escalables, personalizables y eficientes.

Lua, que significa «luna» en portugués, es un lenguaje de programación ligero y versátil, perfecto tanto para quienes empiezan como para programadores con experiencia.

Además de ser compacto, eficiente y capaz de realizar tareas muy variadas, Lua destaca por su simplicidad y por lo fácil que resulta integrarlo con otros lenguajes de programación, sobre todo con C y C++.

Si prefieres una guía más visual, echa un vistazo a nuestro vídeo sobre el mismo tema: «Lenguaje de programación Lua: guía para principiantes».

Primeros pasos con Lua

¿Por qué usar Lua?

  • Ligero y rápido: Lua está diseñado para ser pequeño y eficiente, lo que lo hace ideal para sistemas embebidos y aplicaciones en las que el rendimiento es crítico. Ocupa muy poca memoria y se ejecuta con gran rapidez.
  • Fácil de aprender: la sintaxis sencilla de Lua y su diseño minimalista permiten que cualquier principiante lo asimile y empiece a programar enseguida.
  • Ampliable: Lua se integra con facilidad con otros lenguajes de programación, especialmente C y C++. Eso lo convierte en una herramienta potente para añadir capacidades de scripting a aplicaciones ya existentes.
  • Versátil: Lua admite varios paradigmas de programación, entre ellos el procedimental, el orientado a objetos y el funcional. Esa versatilidad permite a cada desarrollador trabajar con el estilo que mejor le convenga.
  • Scripting con Lua en el desarrollo de videojuegos: Lua se usa mucho en la industria del videojuego para programar la lógica de juego, gracias a su velocidad y flexibilidad. Plataformas populares como Roblox (que utiliza Luau, un superconjunto tipado de Lua), LÖVE 2D, Defold y World of Warcraft emplean Lua o scripting basado en Lua para la lógica de juego y los mods.
  • Luau (el dialecto de Lua de Roblox): y hablando de videojuegos, con decenas de millones de usuarios activos diarios en Roblox, Luau —un superconjunto tipado y optimizado de Lua 5.1— es uno de los entornos de scripting más utilizados del mundo, así que saber Lua se aplica directamente a una de las mayores plataformas de videojuegos.
  • Comunidad y recursos activos: Lua cuenta con una comunidad activa y colaborativa que ofrece multitud de bibliotecas, herramientas y documentación. Así es más fácil encontrar ayuda y recursos mientras aprendes y trabajas con el lenguaje.

Cómo instalar Lua

Windows

  1. Descarga los binarios de Lua desde el sitio web oficial de Lua.
  2. Extrae los archivos en el directorio que prefieras.
  3. Añade el directorio de Lua a la variable de entorno PATH de tu sistema.
  4. Abre un símbolo del sistema y escribe «lua -v» para comprobar si la instalación se ha realizado correctamente.

macOS

  1. Abre Terminal.
  2. Instala Homebrew si aún no lo tienes, con este comando:
    /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
  3. Usa Homebrew para instalar Lua: «brew install lua».
  4. Verifica la instalación escribiendo «lua -v» en Terminal.

Linux

  1. Abre Terminal.
  2. Usa el gestor de paquetes para instalar Lua. En sistemas basados en Debian, escribe esto: «sudo apt-get install lua5.5».
  3. Verifica la instalación con «lua -v».

Esta guía utiliza Lua 5.5, la versión estable actual, cuyas principales novedades incluyen «declaraciones para variables globales, tablas vararg con nombre, arrays más compactos y recolecciones de basura mayores realizadas de forma incremental».

Preparar el entorno de desarrollo

Preparar tu entorno de desarrollo es como ordenar el espacio de trabajo antes de empezar un proyecto nuevo: una configuración limpia y eficiente hace que programar sea más productivo.

Puedes usar cualquier editor de texto o entorno de desarrollo integrado (IDE) para programar en Lua. Entre las opciones más populares están Visual Studio Code, Sublime Text y Neovim (que usa Lua como lenguaje nativo de configuración). Asegúrate de instalar una extensión o un plugin de Lua para disponer del resaltado de sintaxis y otras funciones.

Escribir y ejecutar tu primer programa en Lua

Empecemos con un sencillo programa «Hello, World!»:

print(«Hello, World!»)

Para ejecutar tu programa, guárdalo como «hello.lua» y lánzalo desde la línea de comandos:

lua hello.lua

Sintaxis de Lua y conceptos básicos

La sintaxis de Lua es sencilla y fácil de asimilar. Estos son algunos conceptos fundamentales.

Variables y tipos de datos

En Lua, las variables son como contenedores que guardan datos. Lua tiene tipado dinámico, por lo que no necesitas declarar el tipo de una variable.

local num = 42 — number
local str = «Hello» — string
local bool = true — boolean

Operadores y expresiones

Los operadores son herramientas para realizar operaciones con variables:

local sum = 10 + 5 — arithmetic
local isEqual = (10 == 5) — comparison
local andOp = (true and false) — logical

Estructuras de control

Las estructuras de control dirigen el flujo de tu programa:

if num > 40 then
print(«Number is greater than 40»)
else
print(«Number is 40 or less»)
end
for i = 1, 5 do
print(i)
end
while num > 0 do
print(num)
num = num – 1
end

Funciones en Lua

Las funciones definen un conjunto de instrucciones que puedes reutilizar tantas veces como quieras.

Definir y llamar funciones en Lua

Así se define una función sencilla:

function greet(name)
print(«Hello, » .. name)
end
greet(«Alice»)

Ámbito y vida de las funciones

Las variables declaradas dentro de una función son locales a esa función y dejan de existir cuando la función termina.

function add(a, b)
local sum = a + b
return sum
end

Funciones de orden superior y clausuras

Las funciones de orden superior y las clausuras son técnicas avanzadas. Permiten tratar las funciones como variables y crear comportamientos complejos.

function makeAdder(x)
return function(y)
return x + y
end
end
local addFive = makeAdder(5)
print(addFive(10)) — Output: 15

Las tablas: el corazón de Lua

Las tablas son la estructura de datos principal de Lua y resultan esenciales para todo tipo de operaciones. Las tablas de Lua son muy versátiles: pueden usarse como arrays, diccionarios e incluso objetos.

Crear y manipular tablas

Crear una tabla es sencillo:

local fruits = {«apple», «banana», «cherry»}
local person = {name = «John», age = 30}

Y manipularlas también resulta muy fácil:

table.insert(fruits, «orange»)
print(fruits[4]) — Output: orange
person.job = «developer»
print(person.name) — Output: John

Usar tablas como arrays y como diccionarios

Las tablas pueden funcionar como arrays y como diccionarios:

  • Tabla tipo array

local numbers = {1, 2, 3, 4, 5}

  • Tabla tipo diccionario

local capitals = {USA = «Washington, D.C.», France = «Paris»}

print(capitals[«USA»]) — Output: Washington, D.C.

Gestión de errores y depuración

La gestión de errores en Lua es como tener un botiquín a mano: esperas no necesitarlo nunca, pero es fundamental cuando hace falta.

Tipos de errores habituales y cómo tratarlos

Los errores pueden producirse por motivos muy diversos: errores de sintaxis, de ejecución o de lógica. Lua ofrece mecanismos para gestionarlos con elegancia mediante pcall (llamada protegida).

local status, err = pcall(function()
— code that might fail
end)
if not status then
print(«Error: » .. err)
end

Técnicas y herramientas de depuración

La depuración resulta útil cuando necesitas detectar y corregir problemas de forma sistemática. Lua incluye una biblioteca de depuración integrada que facilita bastante esta tarea.

function debug.traceback([message[, level]])
— usage
end
debug.sethook(function(event, line)
local s = debug.getinfo(2).short_src
print(s .. «:» .. line)
end, «l»)

Buenas prácticas para escribir código Lua robusto

La atención al detalle y las buenas prácticas son la clave.

  • Usa nombres de variables descriptivos.
  • Organiza tu código en módulos.
  • Evita las variables globales para que tu código sea más fácil de mantener y menos propenso a errores.

Trabajar con módulos y bibliotecas de Lua

Las bibliotecas y los módulos de Lua son herramientas especializadas: aportan funciones adicionales y simplifican las tareas complejas.

Bibliotecas estándar de Lua

Lua incluye varias bibliotecas integradas que ofrecen funcionalidades muy variadas, como la manipulación de cadenas, las operaciones matemáticas y la entrada/salida de archivos.

local str = «Hello, World!»
print(string.lower(str)) — Output: hello, world!
local sum = math.max(1, 2, 3, 4, 5)
print(sum) — Output: 5

Cómo usar y crear módulos

Los módulos de Lua te permiten organizar tu código en componentes reutilizables.

Crear un módulo

— mymodule.lua
local M = {}
function M.greet(name)
print(«Hello, » .. name)
end
return M

Usar un módulo

local mymodule = require(«mymodule»)
mymodule.greet(«Alice»)

Bibliotecas de terceros más conocidas

Lua cuenta con un ecosistema muy rico de bibliotecas de terceros que amplían sus capacidades. Estas son algunas de las más populares:

  • LuaSocket para la comunicación en red
  • LuaFileSystem para operaciones con el sistema de archivos
  • Penlight para funciones de utilidad

Aplicaciones prácticas de Lua

Las aplicaciones de Lua van desde los sistemas embebidos hasta el desarrollo de videojuegos y mucho más.

  • Sistemas embebidos e IoT:
    su carácter ligero hace que Lua sea ideal para sistemas embebidos y dispositivos IoT. Aporta potentes capacidades de scripting sin consumir demasiada memoria ni capacidad de procesamiento.
  • Scripting y automatización:
    Lua se usa habitualmente para scripting y automatización de TI, de modo que puedes automatizar tareas repetitivas y ampliar la funcionalidad de las aplicaciones.

Temas avanzados

Para quien quiera profundizar, Lua ofrece funciones avanzadas como las metatablas, los metamétodos, las corrutinas y la integración con código C/C++.

  • Metatablas y metamétodos:
    las metatablas y los metamétodos son la forma que tiene Lua de personalizar el comportamiento de las tablas.
  • Corrutinas y concurrencia:
    las corrutinas son una manera muy potente de gestionar tareas asíncronas y permiten la multitarea cooperativa sin la complejidad de los hilos.
  • Integración con código C/C++:
    Lua puede integrarse en aplicaciones C/C++ y ofrecer así una interfaz de scripting flexible.

En resumen

Lua es un lenguaje de programación versátil y potente, fácil de aprender y divertido de usar. Si comprendes sus conceptos básicos, su sintaxis y sus aplicaciones, podrás empezar a programar en Lua con confianza.

Recuerda que aprender un lenguaje de programación nuevo requiere práctica y paciencia. Si quieres seguir aprendiendo, echa un vistazo a «Learn Lua in 15 Minutes», un tutorial de Lua para principiantes que además es una aplicación Lua que puedes ejecutar de verdad.

Sigue experimentando, creando proyectos y explorando la enorme cantidad de recursos disponibles para seguir formándote.

FAQs

Con práctica diaria y constante, la mayoría de los principiantes asimilan lo básico —variables, flujo de control, funciones y tablas— en unos días o un par de semanas. Si ya conoces otro lenguaje, un fin de semana de dedicación suele ser suficiente para sentirte cómodo.

Alcanzar un nivel profesional con temas avanzados como las metatablas y las corrutinas suele llevar unos meses de trabajo práctico en proyectos.

Si tu objetivo es el desarrollo de videojuegos, el scripting en Roblox o los sistemas embebidos, empieza por Lua: se aprende más rápido y lo aplicas directamente. Si te interesan la ciencia de datos, el desarrollo web o tener más opciones en el mercado laboral, Python es la mejor primera opción.

Muchos desarrolladores aprenden los dos, ya que ambos lenguajes sirven para propósitos muy distintos y rara vez compiten por los mismos casos de uso.

Luau es la versión ampliada de Lua 5.1 creada por Roblox, que añade anotaciones de tipo opcionales, un linter integrado y funciones de sandboxing para ejecutar con seguridad el código creado por los usuarios.

La sintaxis básica es la misma, así que aprender uno significa conocer en gran medida el otro. En la práctica, la diferencia solo importa cuando ya trabajas a un nivel intermedio o cuando tienes que elegir entre el desarrollo en Roblox y los entornos de Lua estándar.

LuaJIT es una implementación de Lua de alto rendimiento que compila el código a código máquina nativo en tiempo de ejecución, por lo que resulta más rápida que Lua estándar en tareas que exigen mucha CPU.

Se utiliza en entornos como OpenResty y en muchos motores de videojuegos donde el rendimiento del scripting es crítico. Para quien empieza, Lua estándar es suficientemente rápido; LuaJIT cobra sentido cuando integras Lua en sistemas sensibles al rendimiento.

El mejor punto de partida depende de tu objetivo:

  • un juego 2D sencillo en LÖVE 2D si te interesa el desarrollo de videojuegos,
  • un «obby» básico de Roblox para practicar con Luau, o
  • un script de NodeMCU que controle hardware para trabajar con sistemas embebidos e IoT.

Para practicar en general, una pequeña herramienta de línea de comandos que procese texto cubre rápidamente las funciones esenciales del lenguaje. La clave está en crear algo que de verdad vayas a usar, en lugar de limitarte a seguir tutoriales sin más.

Lua tiene un peso considerable en la infraestructura web de alto rendimiento gracias a OpenResty (Nginx + LuaJIT), que da soporte a pasarelas de API como Kong y que han utilizado grandes empresas, entre ellas Cloudflare, en fases anteriores de su infraestructura.

  • No es un lenguaje principal para crear interfaces web, pero sigue siendo una herramienta seria para el scripting de backend de baja latencia en entornos donde se despliega OpenResty.

Quizá también te interese...

¿Listo para simplificar los aspectos más complejos de las TI?