Naar inhoud springen

Module:Voorbeeld

Uit Wikipedia, de vrije encyclopedie
Moduledocumentatie​[bekijk] [bewerk] [ververs] [geschiedenis]

Doel

Deze module is voorbeeld hoe modules gebruikt kunnen worden. Dit is niet bedoeld om te testen, gebruik daarvoor Module:Zandbak.

Unittesten voor deze module staan op Module:Voorbeeld/testcases.

Bekijk alle subpagina's van Module:Voorbeeld.

--- Voorbeeld module.
-- @module voorbeeld
-- @alias p


local p = {}	    					--Alle Lua modules op Wikipedia moeten beginnen door een variabele 
										--te definieren die alle extern te benaderen functies bevat.
										--Zo'n variabele mag elke naam hebben, en kan zowel data als functies bevatten.

--- Hello world-functie
-- @param {Frame} frame huidig frame
-- @return Hallo Wereld
-- @usage {{#invoke:Voorbeeld|hallo}}
p.hallo = function( frame )     		-- Voeg een functie toe aan "p".  
	                           		 	-- Dit soort functies kun je aanroepen vanuit Wikipedia
                                		-- met het #invoke commando.
                                		-- "frame" bevat de data die vanuit Wikipedia
                                		-- verstuurd wordt wanneer het uitgevoerd wordt. 
                                		-- 'hallo' is een naam naar eigen keuze. Deze naam moet je ook gebruiken wanneer je die gebruikt.
    
    local str = "Hallo Wereld!" 		-- Declareer een lokale variabele en wijs de tekst/string "Hallo Wereld!" daaraan toe.  
    
    return str    						-- Hiermee wordt de functie gestopt en wordt de inhoud van "str" teruggestuurd naar Wikipedia.
    
end  									-- einde van de functie "hallo"

--- Hello world-functie
-- @param {Frame} frame huidig frame
-- @param {string} frame.args[1] naam
-- @return Hallo Naam
-- @usage {{#invoke:Voorbeeld|hallo_aan|naam}}
function p.hallo_aan(frame)				-- Voeg een tweede functie toe
	local naam = frame.args[1]  		-- Om toegang te krijgen tot de parameters/argumenten die meegegeven werden gebruik je `frame.args`
							    		-- `frame.args[1]` verwijst naar de eerste parameter (zonder naam) die meegegeven werd aan de module

	return "Hallo " .. naam .. "!"  	-- met `..` worden strings aan elkaar geplakt (concatenatie).
									 	-- Deze regel zal dus een aangepaste groet genereren afhankelijk van de input, zoals "Hallo Jan!"
end

--- Fruit tellen
-- @param {Frame} frame huidig frame
-- @param {string} frame.args.bananen aantal bananen
-- @param {string} frame.args.appels aantal appels
-- @return Aantal appels en bananen
-- @usage {{#invoke:Voorbeeld|tel_fruit|appels=aantal appels|bananen=aantal bananen}}
function p.tel_fruit(frame)
	
	local num_bananen = tonumber(frame.args.bananen) or 0	-- Parameters met een naam ({{#invoke:Voorbeeld|tel_fruit|naam=waarde}})
	local num_appels = tonumber(frame.args.appels) or 0		-- zijn toegankelijk door het indexeren van `frame.args` op naam (`frame.args["bananen"]`,
															-- of direct door middel van `frame.args.bananen`).
															
	local conj_bananen = num_bananen == 1 and 'banaan' or 'bananen'
    local conj_appels = num_appels == 1 and 'appel' or 'appels'
    														-- Via een ternaire operator kun je een waarde toekennen op basis van een conditie.
															-- Als `num_bananen` gelijk aan 1 is, wordt `conj_bananen` gelijk aan `'banaan'`, en anders `'bananen'`.
															-- Similarly, `conj_appels` wordt `'appel'` als `num_appels` 1 is, en anders `'appels'`.
    
    return 'Ik heb ' .. num_bananen ..  ' ' .. conj_bananen .. ' en ' .. num_appels .. ' ' .. conj_appels														
										   					-- Hier worden meerdere losse strings aan elkaar geplakt om een leesbare zin te genereren.
end

--- Lokale geluks functie
-- @param {number} a
-- @param {string} b
-- @return Whether a is lucky.
-- @usage lucky(number, string)
local function lucky(a, b) 					-- Het is mogelijk om extra functies te definieren die alleen binnen de module gebruikt kunnen worden.
											-- Hier wordt een functie 'lucky' gedefinieerd met de input parameters a en b. De namen kunnen vrij gekozen worden.
	if b == 'yeah' then 					-- Test of b gelijk is aan de string 'yeah'. Strings hebben altijd aanhalingstekens.
											-- Na een test moet het keyword 'then' gebruikt worden.
		return a .. ' is mijn geluksnummer.'-- Stuur 'a is mijn geluksnummer.' terug als de bovenstaande conditie waar is.
	else 									-- In alle andere gevallen voor de volgende regel uit. Na een 'else' moet geen 'then' gebruikt worden.
		return a 							-- stuur simpelweg a terug.
	end 									-- Een 'if' statement moet altijd eindigen met 'end'.
end 										-- Een funtie ('function') moet ook eindigen met 'end'.

--- Naam2
-- @param {Frame} frame huidig frame
-- @return Iets
function p.Naam2(frame)
										-- De hieropvolgende 5 regels zijn bedoeld om de leesbaarheid te verhogen.
										-- De variabele namen zijn vrij te kiezen
	local pf = frame:getParent().args 	-- Hierdoor kun je de sjabloon parameters benaderen.
	local f = frame.args 				-- Hiermee kun je de parameters van de {{#invoke:}} benaderen.
	local M = f[1] or pf[1] 			-- f[1] en pf[1], verwijzen naar de eerste parameter.
	local m = f[2] or pf[2] 			-- de tweede parameter.
	local l = f.lucky or pf.lucky 		-- Een parameter met een naam. Let op het verschil in syntax met parameters zonder naam.
	if m == nil then 					-- Test of the tweede parameter niet gebruikt wordt
		return 'Eenzaam' 				-- Retourneer de string 'Eenzaam' in dat geval.
	elseif M > m then 					-- Zo niet, controleer of M groter is dan m.
		return lucky(M - m, l) 			-- Bereken in dat geval het verschil en roep de hierboven gedinieerde functie 'lucky' aan.
										-- Het resultaat zal ervan afhangen of l gelijk is aan 'yeah'.
	else
		return 'Wees positief!'
	end
end

return p    -- Alle modules eindigen door de variabele te retourneren die alle functies bevat.

-- Nu kunnen we deze module gebruiken door middel van {{#invoke: Voorbeeld | hallo }},
-- {{#invoke: Voorbeeld | hallo_aan | naam }}, of {{#invoke:Voorbeeld|tel_fruit|bananen=5|appels=6}}
-- Het eerste deel na de invoke is de naam van de wikipagina van de module,
-- Het tweede deel is de naam van de functie die je aanroept.

-- De lua functie "print" is niet toegestaan op Wikipedia. Output is alleen mogelijk door tekst te retourneren vanuit functies.