debug_mode=ON

Buscar en

 
 

Introducción a Lua

Escrito por Venkman hace 1 años bajo una licencia de Creative Commons Creative Commons License
7092 visitas. Etiquetas: lenguajes, introduccion, programacion, lua

Lua es un lenguaje de scripting diseñado con el principal objetivo de ser ligero y extensible. El pequeño tamaño de su runtime y su API C sencilla han hecho que sea elegido en muchas ocasiones para ser embebido en aplicaciones como nmap o Monotone, o en multitud de juegos (WOW, FarCry...). De hecho, viene utilizándose en videojuegos desde hace unos diez años.

Lua apareció por primera vez en 1998 y tiene su origen en la Universidad Pontifica Católica de Rio de Janeiro [PUC-Rio].

El lenguaje

Lua es un lenguaje sencillo. Una de sus principales influencias declaradas es Lisp y su idea de una única estructura, la lista. En el caso de Lua, esta estructura clave fundamental de su arquitectura es la tabla. Como lenguaje más parecido podría nombrarse Javascript. Ambos son lenguajes de script, con soporte para OO basada en prototipos.

Lua es rápido para su naturaleza interpretada; suele quedar en buen lugar en las comparativas.

La sintaxis recuerda a una mezcla de Pascal con otros lenguajes. Un clásico:

-- Una función:
function diHola(persona)
    -- Un bucle:
    for i=1,3 do
        print("Hola " .. persona .. "!")
    end
end

print("¿Cómo te llamas?")
nombre = io.read()
-- Llamada a una función:
diHola(nombre)

Lua soporta un estilo procedural imperativo, pero también un estilo funcional. De hecho, en Lua las funciones son entidades de primera categoría. La función del ejemplo anterior, en realidad se interpreta como:

diHola = function(persona)
    print("Hola " .. persona .. "!")
end

Si tenéis cierta experiencia con Javascript quizá esa forma de escribirlo os sea familiar.

Lua, como decía antes, también soporta orientación a objetos, y lo hace basándose en la estructura de la tabla. Una tabla como t:

t = {}

puede contener funciones, como:

function t.diHola(persona)
    print("Hola " .. persona .. "!")
end
t.diHola("Peter")

O, si utilizamos : en lugar de . Lua nos pasará como primer parámetro self, una referencia a la tabla (u objeto):

t = {}
t.nombre = "Peter"
function t:diHola()
    print("Hola " .. self.nombre .. "!")
end
t:diHola()
-- Que es lo mismo que t.diHola(t) o que t['diHola'](t)

Con esto tenemos todo lo necesario para encapsular objetos. Para otros aspectos de la OO, Lua se se basa en la idea de metatabla, una forma de asociar a una tabla T otra T' en la que se irán a buscar los métodos que no se encuentren en T. Con esto tenemos un mecanismo de herencia. Entrar en detalle del manejo de las metatablas, OO, metaprogramación u otros aspectos más avanzados quedan (quizá) para posibles próximos artículos.

Referencias y Herramientas

La referencia fundamental para aprender Lua es, sin duda, el libro Programming in Lua, del cual se puede encontrar online la primera edición. Es un buen libro, bien escrito y con explicaciones detalladas pero asequibles a cualquiera. Como complemento, el Manual de Referencia que también se puede adquirir impreso o consultar online.

La otra referencia habitual es el Wiki de Usuarios de Lua donde podemos encontrar tutoriales y código, su lista de correo lua-l o el canal de IRC en Freenode.

Existen, además, unos cuantos libros y tutoriales más específicamente orientados a desarrollar modificaciones de determinados juegos, o a la programación de juegos en general.

El soporte por parte de los editores e IDEs es suficientemente amplio. Personalmente recomiendo SciTE un editor muy sencillo con la cualidad de que utiliza Lua para programar macros. Existen también una buena cantidad de librerías y enlaces que se encuentran listadas en el Wiki.

LuaForge es un buen lugar para encontrar proyectos de y para este lenguaje. El Kepler Project es otra interesante referencia que desarrolla y mantiene una variada colección de módulos principal pero no exclusivamente orientados al desarrollo web.

Por último, para comenzar con Lua en Windows se puede encontrar un cómodo instalador que incluye binarios de Lua, un buen número de librerías fundamentales y el editor SciTE, además de unos cuántos ejemplos y documentación.

 

¡Votalo! 5 votos
¡Compártelo!

        

&nbps;

&nbps;

Venkman

Sobre Venkman

Gonzalo García (a veces Venkman) es un tipo con cierto interés por la programación, los lenguajes y el conocimiento del mundo en general. Ingeniero Industrial camuflado de programador, reparte su tiempo entre el aprendizaje y el desarrollo. Acepta ofertas de empleo. Hazle una!

 
Regístrate o haz login para participar.
¿Todavía no conoces debugmodeon?
debugmodeon es la red social para profesionales de la informática
descubre debugmodeon
 

6 comentarios en "Introducción a Lua"

ian_scho
ian_scho escribió
hace 1 años

#1   

Me encanta que este lenguaje está ganando popularidad.

Soy un tipo vago y tengo que aprender otros lenguajes de programación para mejorar mi conocimiento. Es curioso que después de trabajar con Lua ahora no veo PHP tan... Horrible.

Pero ojo. Me parece que es un lenguaje para los frikis (es decir tú y yo, tío) - En Infojobs.net con '115.152 Puestos vacantes' no sale con ningún entrada para 'Lua'.

 

Venkman
Venkman escribió
hace 1 años

#2   

Una nueva razón para aprender -al menos un poco de- Lua: Acaba de ser incluído en el trunk de Apache 2.4 el mod_lua, que embede Lua en el servidor.

Su integración con el servidor es muy alta y esto permite, por ejemplo, hacer mucho de lo que haríamos con configuraciones (.conf) con Lua, lo que nos da más flexibilidad.

 

develCuy
develCuy escribió
hace 10 meses

#3   

A mi Lua me gusta mucho porque la sintaxis es muy sencilla, no tengo que usar miles de llaves y parentesis en lógicas complejas.
@Venkman, ahora que mencionaste mod_lua, estoy trabajando en una libreria PHP para Lua(http://gitorious.org/nutria), es decir, implementa varias funciones que PHP nos acostumbra a usar para no tener que estar inventándonoslas en Lua, eso puede ahorrar mucho tiempo.
La libreria también está preparada para correr con CGILua, de tal forma que se complementa perfectamente para desarrollo web.
Lo que no recomiendo es reemplazar PHP por Lua en forma general. PHP es un lenguaje muy rico, repleto de funciones y librerias para facilitarnos el desarrollo. En cambio Lua te exige desarrollar tu propia base de código, de tal manera que tu aplicación funciona a la medida de tus necesidades y no te cargas de cosas que no te van a servir, que solo están consumiendo recursos.
Entonces, hasta el momento veo que el futuro de Lua está en lugares donde Python, RoR, ni PHP pueden llegar porque son demasiado pesados(ejm: celulares y dispositivos embebidos)

BendicioneS!

 

Venkman
Venkman escribió
hace 10 meses

#4   

develCuy, lo que comentas es bastante cierto. Creo que la idea del proyecto Kepler es justo intentar proporcionar toda esa funcionalidad de base en forma de una serie de módulos (por ejemplo, LuaFileSystem). Pero sí es cierto que no existe realmente una librería estándar con el alcance de lo que tiene, por ejemplo, PHP.

Me parece interesante lo de Nutria, aunque no acabo de tener claro que me guste el usar exactamente los nombres de función que usa PHP. Precisamente uno de los principales problemas de PHP es la inconsistencia en los nombres de las funciones en las librerías estándar (un ejemplo, str_replace pero substr y strpos, en lugar de ser todas, por ejemplo str:pos, str:sub, str:replace). Creo que sería mejor adaptarse a Lua. Con esto me refiero a utilizar tablas y crear unos nombres consistentes y propios, aunque la funcionalidad ofrecida sí sea la misma de las funciones de PHP.

Editado 1 veces. La última vez hace hace 10 meses.

 

develCuy
develCuy escribió
hace 10 meses

#5   

En el caso que tengas scripts muy grandes para migrar y muy bajo presupuesto, significa un ahorro importante no tener que aprender las nuevas funciones. Mi punto es, tener una librería intermedia entre PHP y Lua, va ha significar aprender funciones que luego ya no necesitaré, en vez de aprender directamente las funciones de Lua. Te confieso que conforme desarrollo la librería aprendo más de Lua y me gusta cada vez más, es lo mismo que quiero transmitir con Nutria.

 

Venkman
Venkman escribió
hace 10 meses

#6   

Sí, lo entiendo, pero... no me termina de gustar heredar una de las peores partes de un lenguaje al pasar a otro (y ciertamente, las inconsistencias de nombre de PHP no creo que sea nada interesante conservar)

 
 
 
 

© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |