Módulo:Yesno

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Ícone de documentação Documentação do módulo[ver] [editar] [histórico] [purgar]
Ambox warning yellow.svg Esta predefinição é usada em mais de 30 000 páginas, e alterações em seu conteúdo serão amplamente notadas.
Por favor, teste as alterações na predefinição de testes ou em seu espaço de usuário, e considere discutir mudanças na página de discussão antes de implementá-las.

Este módulo fornece uma interface consistente para o processamento de strings de entrada booleanas ou de tipo booleano. Enquanto Lua permite os valores booleanos true e false, predefinições em código wiki só podem expressar valores booleanos através de strings tais como "sim", "não", etc. Este módulo processa esse tipo de strings e converte-as em entradas booleanas para que Lua possa processá-las. Ele também retorna valores nil como nil, para permitir que haja distinção entre nil e false. O módulo também aceita outras estruturas em Lua como entrada, por exemplo booleanos, números, tabelas, e funções. Se for fornecida uma entrada que não seja ele não reconheça como booleana ou nil, é possível especificar um valor padrão a ser retornado.

Sintaxe[editar | editar código-fonte]

yesno(valor, padrão)

valor é o valor a ser testado. Entradas booleanas ou de tipo booleano (ver abaixo) são sempre avaliadas como true ou false, e valores nil sempre são avaliados como nil. Outros valores são avaliados como padrão.

Uso[editar | editar código-fonte]

Primeiro, carregue o módulo. Note que ele só pode ser carregado a partir de outros módulos feitos em Lua, nem de páginas wiki normais. Para páginas wiki normais pode ser utilizada a predefinição {{yesno}} em vez disso.

local yesno = require('Module:Yesno')

Alguns valores de entrada sempre retornam true, e alguns sempre retornam false. Valores nil sempre retornam nil.

-- Estes sempre retornam true:
yesno('sim')
yesno('verdadeiro')
yesno('yes')
yesno('y')
yesno('true')
yesno('1')
yesno(1)
yesno(true)
 
-- Estes sempre retornam false:
yesno('não')
yesno('falso')
yesno('no')
yesno('n')
yesno('false')
yesno('0')
yesno(0)
yesno(false)
 
-- Valores nil sempre retornam nil:
yesno(nil)

Valores string são convertidos para letras minúsculas antes de serem testados:

-- Estes sempre retornam true:
yesno('Sim')
yesno('SIM')
yesno('sIm')
yesno('vErDaDeIrO')
 
-- Estes sempre retornam false:
yesno('Não')
yesno('NÃO')
yesno('nÃO')
yesno('fALsO')

É possível especificar um valor padrão para o caso de yesno receber como entrada algo que não esteja listado acima. Se não for fornecido um valor padrão, o módulo retornará nil para tais entradas.

-- Estes retornam nil:
yesno('teste')
yesno({})
yesno(5)
yesno(function() return 'Esta é uma função.' end)
 
-- Estes retornam true:
yesno('teste', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'Esta é uma função.' end, true)
 
-- Estes retornam "padrão":
yesno('teste', 'padrão')
yesno({}, 'padrão')
yesno(5, 'padrão')
yesno(function() return 'Esta é uma função.' end, 'padrão')

Note que a string vazia também funciona deste modo:

yesno('')        -- Retorna nil.
yesno('', true)  -- Retorna true.
yesno('', 'padrão') -- Retorna "padrão".

Embora a string vazia geralmente seja avaliada como false em código wiki, ela é avaliada como true em Lua. Este módulo prefere o comportamento em Lua em vez do comportamento em código wiki. Se para o seu módulo for importante tratar strings vazias como false, você precisará remover os argumentos vazios em um estágio anterior do processamento.

-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
 
return function (val, default)
	-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
	-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
	-- following line.
	val = type(val) == 'string' and mw.ustring.lower(val) or val
	if val == nil then
		return nil
	elseif val == true
		or val == 'sim'
		or val == 'verdadeiro'
		or val == 'yes'
		or val == 'y'
		or val == 'true'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'não'
		or val == 'falso'
		or val == 'no'
		or val == 'n'
		or val == 'false'
		or tonumber(val) == 0
	then
		return false
	else
		return default
	end
end