Wikipedia:Lua

(Redirixío dende Wikipedia:LUA)


  Entamu   Alderique   Ayuda y introducción   Módulos disponibles   Zona de pruebes  


Plantía:Espacios de nomes Lua ye un llinguaxe de programación disponible'n Wikipedia cola estensión de MediaWiki Scribunto. El códigu Lua puede incrustase'n plantíes wiki utilizando la función «{{#invoke:}}» de la estensión Scribunto.

El códigu fonte de Lua guárdase'n páxines llamaes módulos (p.ex. Módulu:Demo). Estos módulos individuales invóquense'n páxines de plantíes. Por casu, Módulu:Demo/doc utiliza'l códigu {{#invoke:Demo|hola}} p'amosar el testu «¡Hola, mundu!».

¿Qué ye Lua?

editar
 
Presentación en pdf sobre cómo convertir una plantía con testu wiki a un módulu Lua.

Lua es un llinguaxe de script que puede utilizase p'analizar datos, calcular espresiones y dar formatu a los resultaos utilizando funciones o programación orientada a oxetos. Anque dellos scripts en Lua pueden mantenese simples, pa que s'entiendan meyor, Lua permite estructures complexes, que pueden ser un retu pa los espertos informáticos, con tables, funciones dinámiques y matrices (Array). Lua tamién tien encontu pa recursividá de funciones o permite co-rutines por multi-xeres cooperatives.

Hai que procurar evitar facer los módulos demasiao complexos pa que los usuarios menos espertos los entiendan y puedan participar nel mantenimientu. De siguío s'amuesa un exemplu de códigu fonte en Lua con una función factorial:

  function factorial(n)
    if n == 0 then
      return 1 --devuelve'l resultáu 1 cuando se pasa cero
    else
      return n * factorial(n - 1)
    end
  end
  for index = 1,5 do
      print(index, "n! = ", factorial(index) )
  end

Espaciu de nomes

editar

Los módulos Lua cola estensión Scribunto utilicen na Wikipedia l'espaciu de nomes Módulu. Pa la organización síguense dalgunes convenciones.

Igual que coles plantíes, la documentación d'usu inclúyese na subpáxina/doc. Esta documentación ta incrustada al principiu de la so páxina principal. Por casu, Módulu:Demo amuesa primero'l conteníu de Módulu:Demo/doc y, darréu, el propiu códigu.

Les páxines del espaciu Módulu tienen un editor de códigu «Ace», escritu en JavaScript. Son una esceición les subpáxines/doc que se traten como testu wiki, igual que l'espaciu «Módulu alderique». L'editor Ace proporciona sangráu automáticu y marcáu de sintaxis. Nun ye posible treslladar páxines de códigu Lua a otres de testu wiki, o viceversa.

Prueba unitaria

editar

Pa facer pruebes unitaries dispónse del Módulu:UnitTests. Permite executar un script con una serie de casos de prueba y comprobar que se produz el resultáu esperáu. Por convención, l'entornu de tests ta nes subpáxines/tests y execútase na páxina d'alderique correspondiente. Por casu, Módulu:Demo dispón de Módulu:Demo/tests ya'l resultáu, que s'invoca col códigu {{#invoke:Demo/tests| run_tests}}, s'amuesa'n Módulu alderique:Demo/tests. De siguío se detalla'l códigu de Módulu:Demo/tests.

-- Prueba unitaria de [[Módulu:Demo]]. Entra na páxina d'alderique pa comprobar el test.
local p = require('Módulu:UnitTests')
 
function p:test_hola()
    self:preprocess_equals('{{ #invoke:Prueba | hola }}', '¡Hola mundu!')
end
 
return p

Pa llograr la llista de tolos módulos que tán utilizando estes pruebes unitaries, mira Especial:LoQueEnlazaAquí/Módulu:UnitTests.

Pruebes de módulos

editar

Pa facer pruebes con nuevos módulos ye recomendable siguir la estructura «Módulu:Zona de pruebes/Nome d'usuariu/Nome del módulu». Asina, toles pruebes son subpáxines de «Módulu:Zona de pruebes» y toles pruebes d'un mesmu usuariu son subpáxines de «Módulu:Zona de pruebes/Nome d'usuariu».

Pa facer cambios nos módulos qu'esisten, recoméndase probalos antes. Un módulu puede usase pa distintes plantíes que, de la mesma, pueden tar incluíes en distintes páxines aumentando'l númberu total de páxines que pueden tar afeutaes en cada cambiu. Cola páxina Especial:TemplateSandbox pueden probase distintes páxines sustituyendo tanto plantíes como módulos pa los qu'esistan nel espaciu personal de pruebes.

Carauterístiques específiques en Wikipedia

editar

De normal Lua sólo puede tomar entraes como cadenes de testu y llamales con {{#invoke:}}, que puede recuperase con frame (marco): expandTemplate, frame:preprocess, y asemeyaos.

Lua en Wikipedia sólo puede producir wikitestu que nun puede preguardar, tresformar nin facer inclusiones de {{...}} y otres construcciones. Amás, tolos módulos Lua d'una páxina tán llendaos a 10 segundos de tiempu de CPU (puede mirase nel códigu fonte d'una páxina representada pa ver cuánto tiempu tardó n'analizase una plantía o módulu). Lua na estensión de Scribunto carez de toa triba de funciones (ver: Diferencies col estándar de Lua en MediaWiki)).

Llendes na entrada Lua

editar

Lua col códigu de Scribunto sólo puede executase cuando la páxina ta analizándose. Polo tanto, la única entrada d'usuariu que Lua puede recibir ye d'edición de la páxina. Por casu, nun puede crear un cuadru que calcule la raíz cuadrada d'un númberu tecliáu o recalcular una trozu del conxuntu de Mandelbrot dependiendo de en qué parte del conxuntu padre pulsies. La entrada que Lua puede recibir incluye cualquier páxina de testu trescluible'n Wikipedia. Nun puede incluise nengún tipu de ficheru gráficu (nin siquiera SVG, anque estos tienen códigu de testu XML, sacante que lu cortes y pegues nuna páxina Wiki), nin amosar les páxines que tán nuna categoría, nin los conteníos de páxines especiales.

Wikitestu

editar

Trescluye encabezaos de Wikipedia que de vezu contienen un códigu tapecíu, como "UNIQ5ae8f2aa414ff233-h-3 - QINU", que puede necesitase quitar pa que se pueda analizar eficazmente. Los enllaces internos de tipu [[Wikipedia:Ayuda|]] nun funcionarán cuando se devuelven como salida - necesiten escribise esplícitamente como [[Wikipedia:Ayuda|Ayuda]] . Otra precarga como la sustitución ~~~~ de les firmes, tamién dexará de procesase. Les inclusiones de plantíes, llamaes a analizadores de funciones (Parse function) y sustituciones de variables (esto ye, cualquier cosa con un {{...}} ) nun se procesarán, y tampoco etiquetes como <ref> o <nowiki>.

Ver tamién

editar