Wikipedia:Lua
Inicio | Discusión | Ayuda e introducción | Módulos disponibles | Zona de pruebas |
Espacios básicos | Espacios de discusión | ||
---|---|---|---|
0 | Principal (o artículo) | Discusión | 1 |
2 | Usuario | Usuario discusión | 3 |
4 | Wikipedia | Wikipedia discusión | 5 |
6 | Archivo | Archivo discusión | 7 |
8 | MediaWiki | MediaWiki discusión | 9 |
10 | Plantilla | Plantilla discusión | 11 |
12 | Ayuda | Ayuda discusión | 13 |
14 | Categoría | Categoría discusión | 15 |
100 | Portal | Portal discusión | 101 |
102 | Wikiproyecto | Wikiproyecto discusión | 103 |
104 | Anexo | Anexo discusión | 105 |
828 | Módulo | Módulo discusión | 829 |
2300 | [[Wikipedia:Accesorios|]] | 2301 | |
2302 | [[Wikipedia:Accesorios|]] | 2303 | |
Espacios virtuales | |||
-1 | Especial | ||
-2 | Medio |
Lua es un lenguaje de programación disponible en Wikipedia con la extensión de MediaWiki Scribunto. El código Lua se puede incrustar en plantillas wiki utilizando la funcionalidad «{{#invoke:}}
» de la extensión Scribunto.
El código fuente de Lua se guarda en páginas llamadas módulos (p.ej. Módulo:Demo). Estos módulos individuales son invocados en páginas de plantillas. Por ejemplo, Módulo:Demo/doc utiliza el código {{#invoke:Demo|hola}}
mostrando el texto «¡Hola, mundo!».
¿Qué es Lua?
[editar]Lua es un lenguaje script que se puede utilizar para analizar datos, calcular expresiones y formatear los resultados utilizando funciones o programación orientada a objetos. Aunque algunos scripts Lua se pueden mantener simples, para que sean entendidos mejor, Lua permite estructuras complejas, que pueden ser un reto para expertos informáticos, con tablas, funciones dinámicas y matrices (Array). Lua también soporta recursividad de funciones o permite corutines por multitareas cooperativas.
Hay que procurar evitar hacer los módulos demasiado complejos para que los usuarios menos expertos los entiendan y puedan participar en su mantenimiento. A continuación se muestra un ejemplo de código fuente Lua con una función factorial:
function factorial(n)
if n == 0 then
return 1 --devuelve el resultado 1 cuando se pasa cero
else
return n * factorial(n - 1)
end
end
for index = 1,5 do
print(index, "n! = ", factorial(index) )
end
Espacio de nombres
Los módulos Lua con la extensión Scribunto utiliza en la Wikipedia el espacio de nombres Módulo. Por su organización se siguen algunas convenciones.
Al igual que con las plantillas, la documentación de uso se incluye en la subpágina/doc. Esta documentación está incrustada al principio de su página principal. Por ejemplo, Módulo:Demo muestra primero el contenido de Módulo:Demo/doc y a continuación el propio código.
Las páginas en el espacio Módulo tienen un editor de código «Ace», escrito con JavaScript. Son una excepción las subpáginas/doc que son tratadas como texto wiki, así como el espacio «Módulo discusión». El editor Ace proporciona sangrado automático y marcaje de sintaxis. No es posible renombrar páginas de código Lua a otros de texto wiki, o viceversa.
Prueba unitaria
[editar]Para hacer pruebas unitarias se dispone del Módulo:UnitTests. Permite ejecutar su script con una serie de casos de prueba y comprobar que se produce el resultado esperado. Por convención, el entorno de tests está en las subpáginas/tests y se ejecuta en la página de discusión correspondiente. Por ejemplo, Módulo:Demo dispone de Módulo:Demo/tests y el resultado que se invoca con este código {{#invoke:Demo/tests| run_tests}}
está mostrado en Módulo discusión:Demo/tests. A continuación se detalla el código de Módulo:Demo/tests.
-- Prueba unitaria de [[Módulo:Demo]]. Entra en la página de discusión para comprobar el tests.
local p = require('Módulo:UnitTests')
function p:test_hola()
self:preprocess_equals('{{ #invoke:Prueba | hola }}', '¡Hola mundo!')hola hola
end
return p
Para obtener una lista de todos los módulos que están utilizando estas pruebas unitarias, vea Especial:LoQueEnlazaAquí/Módulo:UnitTests.
Pruebas de módulos
[editar]Para hacer pruebas con nuevos módulos es recomendable seguir la estructura «Módulo:Zona de pruebas/Nombre de usuario/Nombre del módulo». Así, todas las pruebas son subpáginas de «Módulo:Zona de pruebas» y todas las pruebas de un mismo usuario son subpáginas de «Módulo:Zona de pruebas/Nombre de usuario».
Para hacer cambios en módulos existentes, es recomendable probarlo antes. Un módulo puede ser usado para diferentes plantillas que a su vez pueden estar incluidas en diferentes páginas aumentando el número total de páginas que pueden estar afectadas en cada modificación. Con la página Especial:TemplateSandbox se pueden probar diferentes páginas sustituyendo tanto plantillas como módulos para aquellos que existan en su espacio personal de pruebas.
Características específicas en Wikipedia
[editar]En general Lua sólo puede tomar entradas como cadenas de texto e invocarlas con {{#invoke:}}
que puede ser recuperado a través de frame
(marco): expandTemplate
, frame:preprocess
, y similares.
Lua en Wikipedia sólo pueden emitir wikitexto el cual no puede: Preguardar, transformar ni realizar inclusiones de {{...}}
y otras construcciones. Además, todo módulo Lua en una página se limita a 10 segundos el tiempo de CPU (se puede ver en el código fuente de una página representada para ver cuánto tiempo una plantilla o módulo tardó en ser a analizada). Lua en la extensión de Scribunto carece de todo tipo de funciones (ver: Diferencias con el estándar de Lua en MediaWiki)).
Limitaciones en la entrada Lua
[editar]Lua con el código en Scribunto sólo se puede ejecutar cuando la página se está analizando. Por lo tanto, la entrada de usuario único que Lua puede recibir es de edición de la página. Por ejemplo no puede crear un cuadro que calcula la raíz cuadrada de un número tecleado o recalcular una pieza del conjunto de Mandelbrot dependiendo de en qué parte del conjunto padre haces clic. La entrada que Lua puede recibir incluye cualquier página de texto transcludeable en Wikipedia. No puede incluir ningún tipo de archivo gráfico (ni siquiera SVG, a pesar de que tienen código de texto XML, a menos que lo cortes y lo pegues en una página Wiki), listar la páginas que figuran en una categoría, ni los contenidos de páginas especiales.
Wikitexto
[editar]Transcluye encabezados de Wikipedia que contienen frecuentemente un código oculto como "UNIQ5ae8f2aa414ff233-h-3 - QINU", del cual pueden necesitar ser despojado para que se pueda analizar eficazmente.
Enlaces internos del tipo [[Wikipedia:Ayuda]]
no funcionará si se le devuelve como salida - necesitan ser escritos explícitamente como [[Wikipedia:Ayuda|Ayuda]]
. Otra precarga como la sustitución ~~~~
de las firmas, también dejará de ser procesada. inclusiones de plantillas, llamadas a analizadores de funciones (Parse futcion) y sustituciones de variables (es decir, cualquier cosa con un {{...}}
) no serán procesados, ni tampoco etiquetados como <ref>
o <nowiki>
.
Véase también
[editar]- Ayuda:Lua
- Especial:PrefixIndex/Módulo:, lista de todos los módulos existentes.
- Módulo:Demo, el módulo más simple posible.
- Módulo:DemoArgs, un ejemplo utilizando argumentos.
- Lua, página principal en Meta.
- Lua, ídem en MediaWiki.
- Manual de Lua y Scribunto en MediaWiki y todos los Modulos.