Módulo:Testes/Gkiyoshinishimoto/Yesno

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Este módulo fornece uma interface consistente para processar entrada de sequência[a] booleana ou de estilo booleano. Enquanto Lua permite os valores booleanos true e false, as predefinições de código wiki só podem expressar valores booleanos através de sequências[a] como "yes", "no", etc. Este módulo processa esses tipos de sequências[a] e as transforma em entrada booleana para Lua processar. Ele também retorna valores nil como nil, para permitir distinções entre nil e false. O módulo também aceita outras estruturas Lua como entrada, ou seja, booleanos, números, tabelas e funções. Se for passada uma entrada que não é reconhecida como booleana ou nil, é possível especificar um valor padrão para retornar.

Sintaxe[editar código-fonte]

yesno(value, default)

value é o valor a ser testado. A entrada booleana ou de estilo booleano (ver abaixo) sempre é avaliada como true ou false, e nil sempre é avaliada como nil. Outros valores são avaliados como default.

Uso[editar código-fonte]

Primeiro, carregue o módulo. Observe que ele só pode ser carregado a partir de outros módulos Lua, não a partir de páginas wiki normais. Para páginas wiki normais você pode usar {{Teste/Gkiyoshinishimoto/Yesno}}.

local yesno = require('Módulo:Testes/Gkiyoshinishimoto/Yesno')

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

-- Estes sempre retornam true:
yesno('yes')
yesno('sim')
yesno('y')
yesno('s')
yesno('true')
yesno('verdadeiro')
yesno('t')
yesno('v')
yesno('on')
yesno('ligado')
yesno('l')
yesno('1')
yesno(1)
yesno(true)

-- Estes sempre retornam false:
yesno('no')
yesno('não')
yesno('n')
yesno('false')
yesno('falso')
yesno('f')
yesno('off')
yesno('desligado')
yesno('d')
yesno('0')
yesno(0)
yesno(false)

-- Um valor nulo sempre retorna nil:
yesno(nil)
yesno()

Os valores de sequência[a] são convertidos em letras minúsculas antes de serem correspondidos:

-- Estes sempre retornam true:
yesno('Yes')
yesno('Sim')
yesno('YES')
yesno('SIM')
yesno('yEs')
yesno('sIm')
yesno('Y')
yesno('S')
yesno('tRuE')
yesno('vErDaDeIrO')

-- Estes sempre retornam false:
yesno('No')
yesno('Não')
yesno('NO')
yesno('NÃO')
yesno('nO')
yesno('nãO')
yesno('N')
yesno('fALsE')
yesno('fALsO')

Entrada indefinida ('foo')[editar código-fonte]

Você pode especificar um valor padrão se Yesno receber uma entrada diferente da listada acima. Se você não fornecer um padrão, o módulo retornará nil para essas entradas.

-- Estas retornam nil:
yesno(nil)
yesno('foo')
yesno({})
yesno(5)
yesno('')
yesno(function() return 'Esta é uma função.' end)
yesno(nil, true)
yesno(nil, 'bar')

-- Estas retornam true:
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno('', true)
yesno(function() return 'Esta é uma função.' end, true)

-- Estas retornam "bar":
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno('', 'bar')
yesno(function() return 'Esta é uma função.' end, 'bar')

Embora a sequência[a] vazia geralmente seja avaliada como false em texto wiki, ela é avaliada como true em Lua. Este módulo prefere o comportamento de Lua ao comportamento de texto wiki. Se tratar a sequência[a] vazia como false for importante para o seu módulo, você precisará converter as sequências[a] vazias em um valor avaliado como false antes de passá-las para este módulo. No caso de argumentos recebidos a partir de texto wiki, isso pode ser feito usando Módulo:Arguments/Testes.

Lidando com resultados nulos[editar código-fonte]

Por definição:

yesno(nil)         -- Retorna nil.
yesno('foo')       -- Retorna nil.
yesno(nil, true)   -- Retorna nil.
yesno(nil, false)  -- Retorna nil.
yesno('foo', true) -- Retorna true.

Para obter os valores binários que sejam apenas true/false, use um código como:

myvariable = yesno(value or false) -- Quando o valor é nulo, o resultado é false.
myvariable = yesno(value or true)  -- Quando o valor é nulo, o resultado é true.
myvariable = yesno('foo') or false  -- Sequência (string) desconhecida retorna nulo, o resultado é false.
myvariable = yesno('foo', true) or false  -- O valor padrão (aqui: true) se aplica, o resultado é true.

Nota[editar código-fonte]

  1. a b c d e f g do inglês string

-- Função que permite o tratamento consistente de texto wiki de entrada do tipo booleano.
-- Ela funciona similarmente à predefinição {{Teste/Gkiyoshinishimoto/Yesno}}.

return function (val, default)
	-- Se sua wiki usa caracteres que não são do código padrão americano para troca de informações (C.P.A.T.I., 'A.S.C.I.I.') para "sim", "não", etc., você
	-- precisará substituir "val:lower()" por "mw.ustring.lower(val)" na
	-- linha seguinte.
	val = type(val) == 'string' and val:lower() or val
	if val == nil then
		return nil
	elseif val == true
		or val == 'yes'
		or val == 'sim'
		or val == 'y'
		or val == 's'
		or val == 'true'
		or val == 'verdadeiro'
		or val == 't'
		or val == 'v'
		or val == 'on'
		or val == 'ligado'
		or val == 'l'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'não'
		or val == 'n'
		or val == 'false'
		or val == 'falso'
		or val == 'f'
		or val == 'off'
		or val == 'desligado'
		or val == 'd'
		or tonumber(val) == 0
	then
		return false
	else
		return default
	end
end