Saltar para o conteúdo

Módulo:Exemplo

Origem: Wikipédia, a enciclopédia livre.

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.