Módulo:Exemplo
Saltar para a navegação
Saltar para a pesquisa
A documentação para este módulo pode ser criada na página Módulo:Exemplo/doc
local p = {};
-- Todos os módulos Lua na Wikipédia devem começar definindo uma variável que manterá suas funções acessíveis externamente. Tais variáveis podem ter o nome que você quiser e podem também conter vários dados, bem como funções.
p.ola = function( frame )
-- Na linha anterior, foi adicionada uma função ("ola") para "p". Tais funções podem ser chamadas na Wikipédia através do comando #invoke. "frame" conterá os dados que a Wikipedia envia à esta função quando ela é executada.
-- "ola" é um nome de sua escolha. O mesmo nome precisa ser referido quando o módulo é usado.
local str = "Olá mundo!"
-- Na linha anterior foi declarada uma variável local ("str") definida igual a "Olá mundo!".
return str
-- A linha anterior nos diz para sair desta função e enviar as informações contidas na variável local "str" de volta à Wikipédia.
end
-- Na linha anterior está o fim da função "ola"
function p.ola_para(frame)
-- Na linha anterior foi adicionada outra função ("ola_para").
local nome = frame.args[1]
-- Na linha anterior foi declarada uma variável local ("nome") definida igual a "frame.args[1].
-- Para acessar os argumentos passados para um módulo, usamos `frame.args`. `frame.args[1]` refere-se ao primeiro parâmetro não nomeado dado ao módulo.
return "Olá, " .. nome .. "!"
-- `..` concatena strings. A linha anterior retornará uma saudação personalizada dependendo do nome fornecido, como "Olá, Fred!"
end
-- Na linha anteior está o fim da função "ola_para".
function p.contar_frutas(frame)
-- Na linha anterior foi adicionada outra função ("contar_frutas").
local num_bananas = frame.args.bananas
-- Na linha anterior foi declarada uma variável local ("num_bananas") definida igual a "frame.args.bananas".
local num_macas = frame.args.macas
-- Na linha anterior foi declarada uma variável local ("num_macas") definida igual a "frame.args.macas".
-- Argumentos nomeados ({{#invoke:Exemplo|contar_frutas|comida=quantidade}}) são igualmente acessados indexando `frame.args` ao nome (`frame.args["bananas"]`e `frame.args["macas"]`ou, equivalentemente, `frame.args.bananas` e `frame.args.macas`).
return 'Eu tenho ' .. num_bananas .. ' bananas e ' .. num_macas .. ' maçãs'
-- Alinha acima, como na função anterior, concatena um monte de strings para produzir uma frase baseada nos argumentos apresentados.
end
-- Na linha anterior está o fim da função "contar_frutas".
local function sortudo(a, b)
-- É possível definir funções personalizadas para uso. Na linha anterior definimos uma função "sortudo" que tem duas entradas "a" e "b". Os nomes são de sua escolha.
if b == 'sim' then
-- Na linha anterior temos uma condição: se "b" for a string "sim", então passaremos para a próxima linha. Strings requerem aspas ('). Lembre-se de incluir "then".
return a .. ' é o meu número da sorte.'
-- A linha anterior gera a string ""a" é o meu número da sorte." se a condição acima for atendida. O operador de concatenação de strings é indicado por 2 pontos (..).
else
-- Na linha anterior está a alternativa se a condição da seção "if" não foi(r) atendida. Ou seja, se "b" for qualquer outra coisa diferente de "sim", a saída especificada na próxima linha é gerada. "else" não deve ter "then".
return a
-- A linha anterior simplesmente gera um "a".
end
-- Na linha anterior está o fim da seção "if". A seção "if" deve terminar com "end".
end
-- Na linha anterior está o fim da função "contar_frutas". A função deve terminar com "end".
function p.nome2(frame)
-- Na linha anterior foi adicionada outra função ("nome2").
-- As próximas cinco linhas são apenas para conveniência e podem ser usadas como estão para o seu módulo. As condições da saída começam na linha 91.
local pf = frame:getParent().args
-- Na linha anterior foi declarada uma variável local ("pf") definida igual a "frame:getParent().args".
-- Essa linha permite que os parâmetros da predefinição sejam usados neste código facilmente. O sinal de igual é usado para definir variáveis. "pf" pode ser substituído por uma palavra de sua escolha.
local f = frame.args
-- Na linha anterior foi declarada uma variável local ("f") definida igual a "frame.args".
-- Essa linha permite que os parâmetros de {{#invoke:}} sejam usados facilmente. "f" pode ser substituído por uma palavra de sua escolha.
local M = f[1] or pf[1]
-- Na linha anterior foi declarada uma variável local ("M") definida igual a "f[1] or pf[1]".
-- "f[1]" e "pf[1]", que acabamos de definir, referem-se ao primeiro parâmetro. Essa linha encurta-os como "M" por conveniência. Você pode usar os nomes das variáveis originais.
local m = f[2] or pf[2]
-- Na linha anterior foi declarada uma variável local ("m") definida igual a "f[2] or pf[2]".
-- Assim temos, nessa linha, o segundo parâmetro encurtado como "m".
local s = f.sortudo or pf.sortudo
-- Na linha anteior foi declarada uma variável local ("s") definida igual a "f.sortudo or pf.sortudo".
-- Um parâmetro nomeado "sortudo" é abreviado como "s". Observe que a sintaxe é diferente dos parâmetros não nomeados.
if m == nil then
-- Na linha anterior temos uma condição: se o segundo parâmetro não for usado (ou seja, se estiver nulo), passamos para a próxima linha.
return 'Sozinho'
-- A linha anterior gera a string "Sozinho" se a primeira condição for atendida.
elseif M > m then
-- A linha anterior testa uma segunda condição se a primeira condição não foi(r) atendida: se "M" é maior que "m". Se essa segunda condição foi(r) atendida, passamos para a próxima linha.
return sortudo(M - m, s)
-- Na linha anterior a diferença é calculada e passada para a função autodefinida junto com "s". A saída depende se "s" está definido como "sim".
else
-- Na linha anterior está a alternativa se a segunda condição (da seção "elseif") não foi(r) atendida: a próxima linha.
return 'Seja positivo!'
-- A linha anterior retorna a string "Seja positivo".
end
-- Na linha anterior está o fim da seção "if".
end
-- Na linha anterior está o fim da função "nome2".
return p
-- Na linha anterior está o fim do módulo. Todos os módulos terminam retornando a variável contendo suas funções para a Wikipédia.
-- Agora podemos usar este módulo chamando {{#invoke: Exemplo | ola }}, {{#invoke: Exemplo | ola_para | foo }}, ou {{#invoke:Exemplo|contar_frutas|bananas=5|macas=6}}.
-- Observe que a primeira parte da chamada é o nome da página wiki do Módulo, e a segunda parte é o nome de uma das funções anexadas à variável que você retornou.
-- A função "print" não é permitida na Wikipédia. Toda a saída é realizada através de strings "retornadas" à Wikipédia.