Help:Funções sintáticas em predefinições
Nota: Ao editar esta página, você concorda em publicar a sua contribuição no âmbito da licença CC0. Veja as páginas de ajuda do domínio público para mais informações. |
Ao aplicar funções do analisador sintático aos parâmetros das predefinições, pode usar uma barra vertical ("|") para fornecer um valor por omissão, que será adotado como valor se o parâmetro não for passado (estiver indefinido). Usado numa função #if, o texto não expandido do parâmetro indefinido é avaliado como verdadeiro, o que pode ser um resultado inesperado.
Parâmetro | {{{1}}}, {{{param}}} | {{{1|}}}, {{{param|}}} | {{#if:<parâmetro>|True|False}} | ||
---|---|---|---|---|---|
Descrição | Exemplo, sem nome e com nome | {{{1}}}, {{{param}}} | {{{1|}}}, {{{param|}}} | ||
Não é passado. Mais apropriado para parâmetros passados por nome. | {{template}}
|
{{{1}}} | True | False | |
definido, mas nulo/vazio | {{template|}} , {{template|1=}} , {{template|param=}}
|
False | False | ||
É definido com valor, não vazio, não nulo. | {{template|value}} , {{template|1=value}} , {{template|param=value}}
|
value | value | True | True |
{{{1}}}
- Exemplo A
{{#if: {{{1}}} | Parâmetro 1 não está definido, ou é definido e não nulo/não vazio. | Parâmetro 1 é nulo. Ele contém só seqüência(s) de caracteres vazia(s) ou quebra(s) de espaço, etc}}
- Resultado
Parâmetro 1 não está definido, ou é definido e não nulo/não vazio.
{{{1|}}}
- Exemplo B
{{#if: {{{1|}}} | Parâmetro 1 está definido e é não nulo/não vazio. | Parâmetro 1 não está definido, ou é definido mas nulo. Ele contém apenas seqüência(s) de caracteres vazia(s) ou quebra(s) de espaço, etc}}
- Resultado
Parâmetro 1 não está definido, ou é definido mas nulo. Ele contém apenas seqüência(s) de caracteres vazia(s) ou quebra(s) de espaço, etc
O segundo uso ({{{1|}}}
, exemplo B) com padrão vazio presente é muitas vezes a forma desejada para lidar com situações em que existe um parâmetro, mas é composto apenas de espaços vazios.
Testar e passar parâmetros indefinidos (não passados)
Para distinguir entre um parâmetro passado mas possivelmente vazio e um parâmetro indefinido (não passado), compare-o a si próprio usando {{#ifeq:}}
e use "diferentes valores por omissão".
Os valores por omissão usados são indiferentes desde que sejam distintos, portanto tipicamente usam-se valores curtos.
Os seguintes exemplos são todos equivalentes:
{{#ifeq:{{{v|+}}}|{{{v|-}}}| v foi definido (e pode estar vazio) | v não foi definido }}
{{#ifeq:{{{v|}}}|{{{v|-}}}| v foi passado (e pode estar vazio) | v não foi definido }}
{{#ifeq:{{{v|}}}|{{{v}}}| v foi definido (e pode estar vazio) | v não foi definido }}
Em casos raros, uma predefinição se comporta de maneira diferente quando um parâmetro não é especificado em relação a quando é especificado, mas vazio. Quando esta predefinição é usada por uma predefinição de envoltório (que usa o mesmo conjunto de parâmetros com nome), uma forma de assegurar que parâmetros indefinidos permaneçam indefinidos é a seguinte (a técnica também funciona com parâmetros numerados):
{{wrapped_template| normal_parameter={{{normal_parameter|}}}| sensitive_parameter{{#if:{{{sensitive_parameter|}}}||NULL}}={{{sensitive_parameter}}} }}
Se normal_parameter for passado e não estiver vazio, wrapped_template
recebe-o em todos os casos. Se normal_parameter for passado mas estiver vazio, e se não for passado, wrapped_template
recebe um normal_parameter vazio.
Em contraste, só se sensitive_parameter for passado definido, wrapped_template
receberá um parâmetro definido; se sensitive_parameter não for passado e estiver indefinido, o #if
altera o nome do parâmetro para sensitive_parameterNULL.
Para que o comportamento seja o esperado, este nome de parâmetro com sufixo tem de não ter significado para wrapped_template
.