Bienvenidos sean a este post, hoy haremos una breve descripcion de los modulos y paquetes en Lua, comencemos indicando que Lua no setea politicas sino en su lugar Lua provee mecanismos lo suficientemente poderosos para que los grupos de desarrolladores puedan implementar las politicas que mejor se ajusten a ellos, sin embargo este enfoque no trabaja muy bien con los modulos.

Anuncios

Uno de las principales metas de un sistema de modulo es permitir a grupos diferentes a compartir codigo, la falta de una politica comun impide que se compartan, a partir de la version 5.1 Lua define un conjunto de politicas para modulos y paquetes (un paquete viene a ser una coleccion de modulos), dichas politicas no demandan ninguna facilidad extra del lenguaje, los programadores pueden implementarlas usando todo lo que hemos visto hasta ahora:

  • tablas
  • funciones
  • metatablas
  • entorno

Dos funciones facilitan la adopcion de estas politicas:

  • require, para usar los modulos
  • module, para construir los modulos
Anuncios

Los programadores son libres de reimplementar estas funciones con distintas politicas, por supuesto implementaciones alternativas podria derivar en programas que no puedan usar modulos externos y modulos que no puedan ser usadas por programas externos.

Desde el punto de vista del usuario un modulo es una libreria que puede ser cargada con require y esa define un nombre global simple conteniendo una tabla, todo lo que el modulo exporta tales como funciones y constantes, lo define dentro de esta tabla la cual trabaja como un nombre de espacio y un modulo bien equilibrado tambien organiza a require para devolver esta tabla.

Anuncios

Un beneficio obvio de usar tablas para implementar modulos es que podemos manipular modulos como cualquier otra tabla y usa todo el poder de Lua para crear facilidades extras, en la mayoria de los lenguajes los modulos no son valores de primera clase (estas no pueden ser almacenadas en variables, pasadas como argumentos a funciones, etc), asi que estos lenguajes necesitan mecanismos por cada facilidad extra que quieran ofrecer para los modulos, en Lua obtienes estas facilidades de forma gratuita.

Por ejemplo, hay varias formas de que un usuario llame a una funcion de un modulo pero la mas simple es:

require "mod"
mod.foo()
Anuncios

Aunque si prefieres un nombre mas corto para el modulo podemos utilizar un nombre local para ello:

local m = require "mod"
m.foo()

Y tambien se puede renombrar funciones individuales:

require "mod"
local f = mod.foo
f()

Los mas llamativo sobre estas facilidades es que ellas no implican un soporte explicito del lenguaje sino que utilizan lo que el lenguaje ofrece.

Anuncios

En resumen, hoy hemos visto una breve introduccion de modulos y paquetes, cuales son los beneficios de esta forma, como son en otros lenguajes, y algunos ejemplos de implementacion de modulos, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00