Wikipedia:Lua

Hierdie artikel of onderafdeling van die artikel is onder ontwikkeling.
As u wil bydra tot die ontwikkeling daarvan, spring gerus in, maar moet dit asseblief nie uitvee nie.
Software Development
Wikipedianaamruimtes
Onderwerpnaamruimtes Besprekingsnaamruimtes
0 (Hoof/Artikel) Bespreking 1
2 Gebruiker Gebruikerbespreking 3
4 Wikipedia Wikipediabespreking 5
6 Lêer Lêerbespreking 7
8 MediaWiki MediaWikibespreking 9
10 Sjabloon Sjabloonbespreking 11
12 Hulp Hulpbespreking 13
14 Kategorie Kategoriebespreking 15
100 Portaal Portaalbespreking 101
108 [[Wikipedia:Boeke|]] 109
118 [[Wikipedia:Konsepte|]] 119
446 [[Wikipedia:Kursusblaaie|]] 447
710 TimedText TimedText talk 711
828 Module Module talk 829
2300 [[Wikipedia:Gadget|]] 2301
2302 [[Wikipedia:Gadget|]] 2303
2600 [[Wikipedia:Floei|]]
Virtuele naamruimtes
-1 Spesiaal
-2 Media

Lua is ʼn programmeertaal wat nou beskikbaar is vir die Afrikaanse Wikipedia via die MediaWiki-uitbreiding Scribunto. Lua-kode kan binne wiki-sjablone verskans word deur die "{{#invoke:}}"-funksionaliteit van Scribunto in te span. Die uitbreiding steun Lua 5.1 sedert Julie 2015.

Die Lua-bronkode word in bladsye genaamd modules gestoor (bv. Module:Piesangs). Die onderskeie modules word dan op sjabloonblaaie ingeroep (deur kode {{#invoke:}}), byvoorbeeld, Module:Piesangs/doc gebruik die kode {{#invoke:Piesangs|hallo}} om die teks "Hallo, wêreld!" te vertoon.

Om ʼn module te loop

[wysig bron]

Modules word op normale wiki-blaaie geloop deur die #invoke-ontlederfunksie te gebruik. Die sintaksis van #invoke is vergelykbaar met sjabloonsintaksis, maar met ʼn paar verskille. Die belangrikste verskil is dat ʼn funksienaam verskaf moet word. ʼn Funksie is ʼn groep instruksies wat insetwaardes aanneem, dit verwerk, en ʼn uitsetwaarde terugstuur.[1] Dit stem tot ʼn groot mate ooreen met wat ʼn sjabloon doen – parameters word verskaf, dit word verwerk, en ʼn resultaat word verkry. Baie funksies kan egter vir ʼn Lua-module gedefinieer word, terwyl daar slegs een sjabloon op ʼn bladsy gedefinieer kan word.

Verder kan ʼn Lua-module ook nie direk geloop word nie – slegs een van die module se funksies kan geloop word. Die module is net ʼn houer vir die funksies en doen nie self enige verwerking nie. Daar is dus twee redes waarom ʼn funksienaam verskaf moet word: ʼn module kan nie op sy eie geloop word nie, en deur nie ʼn funksienaam te verskaf nie sal Lua nie weet watter funksie geloop moet word nie.

Die eenvoudigste manier om ʼn module vanaf ʼn wiki-blad te loop is as volg:

{{#invoke:modulenaam|funksienaam}}

Byvoorbeeld, Module:Piesangs, wat een funksie genaamd "hallo" het, kan as volg geloop word:

  • {{#invoke:Piesangs|hallo}} → Hallo, wêreld!

Die gebruik van argumente

[wysig bron]

Argumente word aan modules gegee op dieselfde metode as wat dit aan sjablone gegee word. Neem kennis dat die teks na die eerste pypkarakter altyd die funksienaam is; die eerste posisionele argument is die teks na die tweede pypkarakter.

{{#invoke: modulenaam|funksienaam|eerste posisionele argument|tweede posisionele argument|benoemde argument = waarde}}

Byvoorbeeld, in Module:PiesangsArgumente groet die "hallo"-funksie verskillende mense afhangende van die eerste posisionele argument. Dit werk as volg:

  • {{#invoke:PiesangsArgumente|hallo|Karen}} → Hallo, Karen!
  • {{#invoke:PiesangsArgumente |hallo|Ferdie}} → Hallo, Ferdie!

PiesangsArgumente verskaf ook ʼn funksie genaamd "tel_vrugte", wat die benoemde argumente piesangs en appels gebruik om die aantal piesangs en appels wat gegee word te tel. Dit kan as volg geloop word:

  • {{#invoke:PiesangsArgumente|tel_vrugte|appels=3|piesangs=4}} → Ek het 4 piesangs en 3 appels
  • {{#invoke:PiesangsArgumente|tel_vrugte|piesangs=5|appels=2}} → Ek het 5 piesangs en 2 appels

Meeste modules behoort ʼn dokumentasieblad te hê wat verduidelik watter argumente gebruik kan word, en die uitwerking wat hulle sal hê.

Voorbeeldmodules

[wysig bron]

Vra ʼn skrip aan

[wysig bron]

Besoek Wikipedia:Lua-versoeke om hulp aan te vra met die skryf van ʼn Lua-skrip om ʼn spesifieke taak op Wikipedia of ʼn ander projek van die Wikimedia-stigting te verrig.

Geskiedenis

[wysig bron]

Sordid history. {{qif}}, ParserFunctions, Lua extension, debat oor wiki-skriptaal (JavaScript v. Lua), mw:Extension:WikiScripts, Tim skryf Scribunto met aanvanklike ondersteuning vir Lua.

Na jare se bespreking is Lua in 2012 vir toetsdoeleindes geïnstalleer op test2.wikipedia.org, met ʼn ope uitnodiging aan alle bydraers om te eksperimenteer met die ontwikkeling van Lua-modules. Lua word in Februarie 2013 op die Engelse Wikipedia geïnstalleer na toetslopies op mediawiki.org en Wikimedia se toets-wikis.

Oor Lua

[wysig bron]
Sien ook (en) Brad Jorsch se kort voorlegging van ʼn basiese voorbeeld van hoe om ʼn wikitext-sjabloon om te skakel na ʼn Lua-module.

Lua is ʼn skriptaal wat gebruik kan word om data te analiseer, uitdrukkings uit te werk en resultate te formateer met behulp van funksies en objekgeoriënteerde programmering. Hoewel sekere Lua-skripte eenvoudig gehou kan word om maklik te begryp, laat Lua komplekse strukture toe soos tabelle, dinamiese funksies, en assosiatiewe skikkings waar indekssubskripte woorde sowel as indeksnommers kan wees. Lua ondersteun ook rekursie van hergeneste funksies, neem dus sorg om oordrewe kompleksiteit te vermy, veral waar ander bydraers sal sukkel om die Lua-modules te onderhou. Die volgende voorbeeld toon Lua-bronkode vir ʼn hallo wêreld-funksie binne Module:HalloWereld:

-- Alle Lua-modules op Wikipedia moet afskop deur die definiëring van ʼn veranderlike wat hul
-- eksterne toeganklike funksies sal bevat. Hulle kan enige naam kry en ook data bevat.
my_objek = {}

-- Voeg ʼn funksie tot die veranderlike. Dit is oproepbaar binne Wikipedia via die #invoke-bevel.
-- "raam" sal die data bevat wat Wikipedia aan hierdie funksie stuur wanneer dit geroep word. 
my_objek.hallo = function( frame) 

    -- Verklaar ʼn plaaslike veranderlike en ken data aan dit toe.
    local str = "Hallo Wêreld!"  

    -- Verlaat hierdie funksie en stuur die inligting binne "str" terug na Wikipedia.
    -- Die "print"-funksie word nie toegelaat nie, so alle uitsette word bewerkstellig via 
    -- terugkerende stringe volgens die onderstaande metode.
    return str    

-- Beëindig die funksie.
end

-- Alle modules word beëindig deur die veranderlike wat hul funksies bevat, terug te stuur na Wikipedia.
return my_objek

-- Die module kan nou gebruik word deur {{#invoke: HalloWêreld | hallo }} te roep.
-- Die #invoke-bevel skop af met die module se naam, in die geval "HalloWêreld",
-- en neem daarna die naam van een van sy funksies as argument aan, in die geval "hallo".

ʼn Voorbeeld van Lua word uitgelig deur die merker "<source lang="lua">...</source>" weerskante van die Lua-bronkode te plaas. Om meer komplekse voorbeelde te sien, gaan na die artikel: "Lua (programmeertaal)".

Vir instruksies oor hoe om Lua binne MediaWiki (en dus ook Wikipedia) te gebruik, sien mw:Extension:Scribunto/Lua reference manual.

Moduletoetsing

[wysig bron]

ʼn Moduletoetsraamwerk vir Lua-skripte op Wikipedia is beskikbaar by Module:UnitTests. Dit laat die uitvoer van ʼn skrip toe op ʼn gegewe stel insette, en bevestig dat die verwagte uitsette gelewer word. Moduletoetsing is veral handig by die vinnige bespeuring van regressie, waar bywerkings op ʼn skrip nuwe (of ou) probleme na vore kan bring.

Volgens konvensie word moduletoetse vir ʼn module soos Module:Piesangs in Module:Piesangs/toetsgevalle geplaas, en word dan uitgevoer op Modulebespreking:Piesangs/toetsgevalle met bv. {{#invoke: Piesangs/toetsgevalle | run_tests}}. Die metodes moet met "test" begin. ʼn Eenvoudige voorbeeld uit Module:Piesangs/toetsgevalle volg hieronder.

-- Moduletoetse vir [[Module:Piesangs]]. Klik op besprekingsblad om toetse te loop.
local p = require('Module:UnitTests')
 
function p:test_hallo()
    self:preprocess_equals('{{#invoke:Piesangs | hallo}}', 'Hallo, wêreld!')
end
 
return p

Vir ʼn lys van alle modules wat van moduletoetse gebruik maak, sien Special:Whatlinkshere/Module:UnitTests.

Daar bestaan ook ʼn alternatiewe moduletoetsraam genaamd Module:ScribuntoUnit, oorspronklik uit die Hongaarse Wikipedia. Kenmerkgewys is dit baie dieselfde as Module:UnitTests, maar dit besit ʼn ander kodestyl, en werp regte foute wat dan gevang word met behulp van beskermde oproepe. Dit besit ook ʼn metode om wisselveranderlikes binne ʼn sekere akkuraatheid te vergelyk.

Wikipedia-spesifieke kenmerke

[wysig bron]

Algeheel: Lua kan slegs insette as teks aanstuur na {{#invoke:}} en wat ook al gekry word via mw.title.new(...):getContent() en frame:expandTemplate(). Lua-uitsette sal nie vooraf verwerk word nie tensy frame:preprocess() eksplisiet geroep word, menende dat sjabloonoproepe, ontledingsfunksies ens. in die uitsette nie na behore sal werk nie. Verder is alle Lua in die bladsy beperk tot 10 sekondes SVE-tyd (daar kan in die bronkode van ʼn verbeelde bladsy gekyk word om te sien hoe lank ʼn module of sjabloon sal neem om te ontleed). Relatief tot standaard Lua kort Scribunto se Lua ʼn verskeidenheid funksies (sien Wikipedia:Lua § Notes).

Insetbeperkings in Lua

[wysig bron]

Lua-kode in Scribunto loop slegs terwyl die bladsy ontleed word. Daarom is die enigste gebruikerinsette wat Lua kan ontvang deur middel van bladredigering – dit kan nie ʼn kassie skep wat die vierkantswortel van ʼn getal bereken wat ingetik word nie, of ʼn gedeelte van die Mandelbrot-stel herbereken volgens die gedeelte van die voorsaatstel waarop geklik word nie. Die insette wat Lua kan ontvang sluit enige traskluseerbare teksblaaie op Wikipedia in. Dit sluit nie grafiese lêers in nie (nie eers .SVG-lêers nie, hoewel hulle teks is. Behalwe as jy dit sny en op ʼn Wiki-teksblad plak), ook nie die lys bladsye gelys in ʼn kategorie nie, verder ook nie die inhoud van nie-transkluseerbare spesiale bladsye nie.

Wikitext

[wysig bron]

Getranskluseerde Wikipedia-opskrifte bevat baiemaal verborge kode soos "UNIQ5ae8f2aa414ff233-h-3--QINU" wat verwyder moet word sodat hulle effektief ontleed kan word.

Wikilinks van die soort [[Wikipedia:Hulp|]] sal nie werk indien dit as uitset teruggegee word nie – hulle moet eksplisiet geskryf word as [[Wikipedia:Hulp|Hulp]]. Ander voorafstoor-transformasies, soos die vervanging van ~~~~ met handtekeninge, sal ook nie verwerk word nie. Sjabloontransklusies, ontlederfunksieoproepe en vervanging van veranderlikes (bv. enige iets met ʼn {{...}}) sal nie verwerk word nie, ook nie merkers soos <ref> of <nowiki> nie.

Etiketteer verwerkte sjablone

[wysig bron]

Plaas asseblief die {{lua}}-sjabloon op die dokumentasiesubblad van alle sjablone wat van Lua gebruik maak. Dit sal help om Lua-gebruik en sjabloonverwerkings beter deur te gee.

Sien ook

[wysig bron]
Afrikaanse Wikipedia-spesifieke hulpbronne

Notas

[wysig bron]
  1. Veelvuldige uitsetwaardes is ook moontlik, maar funksies wat dit bewerkstellig is nie normaalweg bedoel vir toegang vanaf wiki-blaaie nie.
Hierdie artikel is in sy geheel of gedeeltelik vanuit die Engelse Wikipedia vertaal.