Módulo:Yesno/Testes
Esta é a página de testes de módulos de Módulo:Yesno (dif). |
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 {{Yesno/Testes}}.
local yesno = require('Módulo:Yesno/Testes')
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]
-- Função que permite o tratamento consistente de texto wiki de entrada do tipo booleano.
-- Ela funciona similarmente à predefinição {{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 mw.ustring.lower(val) 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