Module:Yesno : Différence entre versions

De Wikonsult
Sauter à la navigation Sauter à la recherche
(nano-optimisation : pas de réassignation à l'identique dans le cas "not string")
m (1 révision importée)
 
(Aucune différence)

Version actuelle datée du 5 mai 2020 à 20:05

Ce module propose une fonction cohérente pour transformer des valeur ou chaine en booléen.

Utilisation

Le wikicode ne permet pas de saisir directement des valeur booléenne, seulement des chaine type « oui » ou « non ». Ce module les évalue et détermine une valeur booléenne true ou false que lua pourra utiliser. Il retourne nil en l'abscence de paramètre, pour permettre la distiction entre nil et false. Lorsque ce paramètre a une valeur imprévue, le module retourne la valeur par défaut ou nil.

Syntaxe

yesno(valeur, défaut, défautVide)
  • valeur – est la valeur à tester.
  • défaut – valeur par défaut pour les valeurs qui ne sont ni assimilé à des booléens ni nil.
  • défautVide – si ce paramètre n'est pas nil ce sera la valeur par défaut pour les chaines vides ou uniquement composées d'espaces, sauts de ligne....

Exemples

Il faut commencer par charger le module. Il ne peut être appelé que depuis un autre module Lua, il ne peut pas être appelé directement par un modèle.

local yesno = require('Module:Yesno')

Certaines valeurs retournent toujours true, d'autres valeurs retournent toujours false. La valeur nil retourne toujours nil.

-- Ces valeurs retournent toujours true :
yesno('oui')
yesno('yes')
yesno('y')
yesno('true')
yesno('1')
yesno(1)
yesno(true)

-- Ces valeurs retournent toujours false :
yesno('non')
yesno('no')
yesno('n')
yesno('false')
yesno('0')
yesno(0)
yesno(false)

-- Une valeur nil retourne nil :
yesno(nil)

Les chaines sont converties en minuscules avant d'être évaluées :

-- Ces valeurs retournent toujours true :
yesno('Oui')
yesno('OUI')
yesno('oUi')
yesno('tRuE')

-- Ces valeurs retournent toujours false :
yesno('Non')
yesno('NON')
yesno('nOn')
yesno('fALsE')

Une valeur par défaut peut être spécifiée pour les valeurs autres que celle listée ci-dessus. Si aucune valeur par défaut n'est fournie le module retourne nil pour ces valeurs.

-- Ces valeurs retournent nil :
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'Ceci est une fonction.' end)

-- Ces valeurs retournent true :
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'This is a function.' end, true)

-- Ces valeurs retournent "bar" :
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'This is a function.' end, 'bar')

Une chaine vide est évalué à la valeur du troisième paramètre s'il est défini, sinon à la valeur par défaut.

yesno('')               -- Retourne nil.
yesno('', true)         -- Retourne true.
yesno('', true, nil)    -- Retourne true.
yesno('', true, false)  -- Retourne false.
yesno('', 'foo', 'bar') -- Retourne 'bar'.

Attention, cette dernière fonctionnalité est différente du module présent sur en: qui n'a qu'une valeur par défaut.



-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.

return function (val, default, emptyDefault)
	-- 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.
	if type(val) == 'string' then val = val:lower() end
	if val == nil then
		return nil
	elseif val == true 
		or val == 'yes'
		or val == 'y'
		or val == 'oui'
		or val == 'o'
		or val == 'true'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'n'
		or val == 'non'
		or val == 'false'
		or tonumber(val) == 0
	then
		return false
	elseif emptyDefault ~= nil and type(val) == 'string' and val:match( '^%s*$' ) then
		return emptyDefault
	else
		return default
	end
end