Ajuda:ParserFunctions
Origem: Wikipédia, a enciclopédia livre.
Esta extensão do MediaWiki é uma coleção de funções de análise sintática (ParserFunctions). Essas funções possuem uma cerquilha (#) na frente de seus nomes, adquirindo, portanto, a seguinte sintaxe:
- {{#nomedafunção: argumento 1 | argumento 2 | argumento 3...}}
Índice |
[editar] Funções
Este módulo define sete funções existentes atualmente: expr, if, ifeq, ifexist, ifexpr, switch, and time.
[editar] #expr:
A função expr computa matematicamente expressões baseadas na permutação de números (ou variáveis/parâmetros que resultam em números) e operadores. Ele não funciona com strings (cadeias de caracteres); para tal propósito, utilize a função ifeq. A sintaxe é:
{{ #expr: expressão }}
Segue abaixo uma lista de operadores suportados. Para maiores detalhes sobre a precedência de operadores, veja m:Help:Calculation.
De maneira geral: (1) grupos (parênteses), (2) unários (sinais +/- e NOT lógico), (3) multiplicativo (*, /, div, mod), (4) aditivo (+ e -), (5) round, (6) comparativo (=, !=, <, >, etc.), (7) AND lógico, (8) OR lógico. Quando existirem operadores com a mesma classe de precedência, os cálculos são resolvidos os da esquerda para direita. Como sempre, alguns parênteses redundantes são melhores do que um código conciso e errado.
Operador | Operação | Exemplo |
---|---|---|
nenhum | {{#expr: 123456789012345}} = 1.2345678901234E+14 | |
{{#expr: 0.000001}} = 1E-06 | ||
( ) | Operadores de grupos | {{#expr: (30 + 7) * 7 }} = 259 |
+ | Sinal unário + | {{#expr: +30 * +7}} = 210 |
- | Sinal unário - (negação) | {{#expr: -30 * -7}} = 210 |
not | NOT unário, NOT lógico | {{#expr: not 0 * 7}} = 7 {{#expr: not 30+7}} = 7 |
* | Multiplicação | {{#expr: 30 * 7}} = 210 |
/ | Divisão, o mesmo que div | {{#expr: 30 / 7}} = 4.2857142857143 |
div | Divisão, o mesmo que /, sem divisão por inteiro |
{{#expr: 30 div 7}} = 4.2857142857143 {{#expr: 5 div 2 * 2 + 5 mod 2}} = 6 |
mod | "Módulo", resto da divisão após "truncar" ambos operadores em números inteiros. Atenção, div e mod são diferentes das demais linguagens de programação. |
{{#expr: 30 mod 7}} = 2 {{#expr: -8 mod -3}} = -2 {{#expr: -8 mod +3}} = -2 {{#expr: 8 mod 2.7}} = 0 {{#expr: 8 mod 3.2}} = 2 {{#expr: 8.9 mod 3}} = 2 |
+ | Adição | {{#expr: 30 + 7}} = 37 |
- | Subtração | {{#expr: 30 - 7}} = 23 |
round | Arredonda o número a esquerda para a potência de 1/10 dada a direita | {{#expr: 30 / 7 round 3}} = 4.286 {{#expr: 30 / 7 round 0}} = 4 {{#expr: 3456 round -2}} = 3500 |
= | Igualdade | {{#expr: 30 = 7}} = 0 |
<> | Desigualdade, o mesmo que != | {{#expr: 30 <> 7}} = 1 |
!= | Desigualdade, o mesmo que <>, xor lógico | {{#expr: 1 != 0}} = 1 |
< | Menor que | {{#expr: 30 < 7}} = 0 |
> | Maior que | {{#expr: 30 > 7}} = 1 |
<= | Menor ou igual a | {{#expr: 30 <= 7}} = 0 |
>= | Maior ou igual a | {{#expr: 30 >= 7}} = 1 |
and | E lógico | {{#expr: 4<5 and 4 mod 2}} = 0 |
or | OU lógico | {{#expr: 4<5 or 4 mod 2}} = 1 |
Os operadores booleanos consideram 0 como "falso" e qualquer outro número como "verdadeiro"; uma saída "verdadeira" é mostrada como 1.
Números utilizam "." como símbolo decimal. A função formatnum:
pode ser utilizada para mudar o ponto decimal para uma vírgula nos países e locais onde isto for apropriado. A notação científica com E mais expoente ainda não é suportada como entrada de expressões, mas é utilizada nas saídas; para maiores detalhes veja m:Help:Calculation.
[editar] #if:
A função if é uma estrutura do tipo se-então-senão. A sintaxe é:
{{ #if: <condição> | <então texto> | <senão texto> }}
Se a condição é uma string vazia ou consiste apenas de espaços em branco, então é considerada como falsa, e a função retorna senão texto. Caso contrário, a função retorna então texto. O senão texto pode ser omitido; assim, a condição for falsa, a função devolve um texto vazio.
Um examplo:
{{Predefinição|parâmetro=algo}} {{Predefinição}} {{Predefinição|parâmetro=}} | | | | | | | | | {{ #if: {{{parâmetro|}}} | Parâmetro é definido. | Parâmetro não definido ou vazio}}
Note que a função if não suporta sinais de "=" sou expressões matemáticas. {{#if: 1 = 2|sim|não}} irá devolver "sim", porque a string "1 = 2" não é vazia.
[editar] #ifeq:
ifeq compara duas strings ou números, e retorna outra string dependendo do resultado da comparação. A sintaxe é:
{{ #ifeq: <texto 1> | <texto 2> | <igual texto> | <não igual texto> }}
Ambas strings podem ser interpretadas como números como se a comparação fosse numérica. Para forçar a comparação de uma cadeira de caracteres que não podem ser intepretadas como números deve-se adicionar aspas a elas:
- {{ #ifeq: +07 | 007 | 1 | 0 }} resulta 1
- {{ #ifeq:"+07"|"007"| 1 | 0 }} resulta 0
A comparação de uma string é caso-sensitivo:
- {{ #ifeq: A | a | 1 | 0 }} resulta 0
[editar] #ifexist:
ifexist retorna um de dois resultados, baseado se existe ou não um artigo ou página com o título especificado. Exemplos:
{{#ifexist:Wikipédia|Sim|Não}}
resulta Sim, porque Wikipédia existe{{#ifexist:wikipédia|Sim|Não}}
resulta Sim, porque wikipédia é a forma canônica do artigo Wikipédia{{#ifexist:WiKiPeDiA|Sim|Não}}
resulta Não porque o artigo WiKiPeDiA não existe{{#ifexist:m:Help:Calculation|Sim|Não}}
resulta Não entretanto m:Help:Calculation existe, porque a função não interpreta o prefixo de interwiki.
O primeiro parâmetro é o título a ser checado, o segundo é o resultado positivo e o terceiro, o negativo. Se o parâmetro passado não produz um objeto com título válido, então o resultado é negativo.
[editar] #ifexpr:
ifexpr computa uma expressão matemática e retorna uma de duas strings como resultado
{{#ifexpr: <expressão> | <então texto> | <senão texto> }}
Se a expressão calculada resulta em zero, então o senão texto é mostrado, do contrário, o então texto é mostrado. A sintaxe da expressão é a mesma utilizada por expr.
- O senão texto também é mostrado para expressões vazias:
{{#ifexpr: {{ns:0}}|Presente|'''ou então'''}}
resulta ou então- Omitindo ambos então texto e senão texto não resulta em nenhuma saída exceto uma possível mensagem de erro; isso pode ser utilizada para checar a correção de uma expressão, ou para checar a palavra da mensagem de erro (emulando afirmação, erros forçados):
{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|1|0}}}}
Division by zero{{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|0|1}}}}
{{#if:{{#ifexpr: 1=2}}|wrong|correct}}
correct{{#if:{{#ifexpr: 1E2}}|wrong|correct}}
wrong{{#if:{{#ifexpr: 1/0}}|wrong|correct}}
wrong{{#if:{{#ifexpr: a=b}}|wrong|correct}}
wrong
[editar] #switch:
switch
compara um único valor de comparação com vários outros, retornando uma string se encontrar um valor igual. A sintaxe é basicamente:
{{ #switch: <valor de comparação> | <valor1> = <resultado1> | <valor2> = <resultado2> | ... | <valorn> = <resultadon> | <resultado padrão> }}
switch
irá procurar por cada valor passado até que um valor coincida com o valor de comparação. Quando encontrado, o resultado para aquele valor é retornado (o texto escrito após o sinal de igual). Se nenhum resultado for encontrado e o último item não possuir sinal de igualdade, a função então o retornará como resultado padrão. Se o seu resultado necessitar obrigatoriamente de um sinal de igualdade, você poderá utilizar #default
:
{{ #switch: <valor de comparação> | <valor> = <resultado> | #default = <default resultado> }}
Note que é possível também abortar valores (reduzindo a necessidade de resultados duplicados). Por exemplo:
{{ #switch: <valor de comparação> | <valor1> | <valor2> | <valor3> = <resultado3> | ... | <valorn> = <resultadon> | <resultado padrão> }}
Note que o valor1 e valor2 não possuem o sinal de igualdade. Se eles forem encontrados, eles darão o resultado do valor3 (isto é, o que está no resultado3).
- Assim como para #ifeq:, a comparação é numérica quando possível:
- {{ #switch: +07 | 7 = Sim | 007 = Bond | Não }} resulta Sim
- {{ #switch:"+07"|"7"= Sim |"007"= Bond | Não }} resulta Não
- O valor encontrado pode ser vazio; assim sendo, as seguintes estruturas são equivalentes:
- {{ #if: {{ns:0}} | não vazio | vazio }} resulta vazio
- {{ #switch:{{ns:0}}|=vazio|não vazio }} resulta vazio
Compração entre strings são caso-sentitivo:
- {{ #switch: A | a=0 | A=1 }} resulta 1
- {{ #switch: A | a=0 | 1 }} resulta 1
Não se deve confundir isso com o fato de que as funções de análise sintática são caso-sensitivo:
- {{ #swItch: A | a=0 | 1 }} resulta 1
[editar] #time:
#time é uma função de formatação de tempo e data. A sintaxe é
- {{ #time: formato }}
ou
- {{ #time: formato | tempo }}
Se o tempo não é especificado, o tempo em cada artigo é convertido para o HTML que é utilizado. O parâmetro formato é um formato de string similar ao utilizado pelas datas PHP.
Os seguintes formatos possuem o mesmo significado que em PHP. Diferenças significantes do comportamento do PHP, tal como internacionalização (i.e. idioma e diferenças locais), devem ser consideradas como erro das ParserFunctions e deverão ser reportadas. Todos os códigos de formato numérico retornam números de acordo com o idioma local, use o xn código descrito abaixo para verificar isso.
Código | Descrição | Saída de exemplo | Saída real |
---|---|---|---|
d | O dia do mês, acompanhado de zero. | 04 | 25 |
D | Uma abreviação do dia da semana. | Seg | Sáb |
j | O dia do mês, não acompanhado de zero. | 3 | 25 |
l | O nome completo do dia da semana. | Segunda-feira | Sábado |
N | O dia da semana segundo cód. ISO 8601 | 1 (para Segunda) a 7 (para o Domingo) | 6 |
w | Número do dia da semana | 0 (para Domingo) até 6 (para o Sábado) | 6 |
z | O dia do ano (iniciando do 0) | 0 até 365 | 328 |
W | Número da semana (ISO 8601) | 47 | |
F | O nome completo do mês. | Janeiro | Novembro |
m | O número do mês, acompanhado de zero. | 01 até 12 | 11 |
M | A abreviação do nome do mês. | Jan | Nov |
n | O número do mês, não acompanhado de zero | 1 até 12 | 11 |
t | Número de dias do mês | 28 até 31 | 30 |
L | Ano bissexto | 1 se sim, senão 0 | 0 |
Y | O ano com 4 dígitos | 2006 | 2006 |
y | O ano com 2 dígitos. | 06 | 06 |
a | am ou pm | pm | |
A | AM ou PM | PM | |
g | horas (formato de 12 horas) sem acompanhar zero | 1 até 12 | 4 |
G | horas (formato de 24 horas) sem acompanhar zero | 0 até 23 | 16 |
h | horas (formato de 12 horas) acompanhada por zero | 01 até 12 | 04 |
H | A hora do dia, acompanhada por zero | 00 até 23 | 16 |
i | O minuto, acompanhado de zero. | 00 até 59 | 20 |
s | O segundo, acompanhado de zero | 00 até 59 | 33 |
c | data no formato ISO 8601 | 2006-11-25T16:20:33+00:00 | |
r | data formatada RFC 2822 | Sat, 25 Nov 2006 16:20:33 +0000 | |
U | segundos desde 1 de Janeiro de 1970 00:00:00 GMT | 1164471633 |
Qualquer caractere não reconhecido será passado direto para a saída sem ser modificado. Há também duas convenções de aspas que podem ser utilizadas para produzir uma saída literal com caracteres.
- Caracteres dentro de aspas fechadas será considerado uma saída literal (no qual as próprias aspas serão removidas). Aspas não fechadas são consideradas aspas literais. Exemplo:
- {{ #time: "O mês é" F}} → O mês é Janeiro
- {{ #time:i's"}} → 20'11"
- Barras invertidas como em PHP's date() são suportadas. \H produz um literal H, \" produz um literal ".
[editar] Exemplos
- {{#time:j F Y|-14 days}} resulta 11 Novembro 2006 (14 dias atrás)
- {{#time:H:i|+6 hours}} resulta 22:20 (6 horas depois que o UTC)
- {{#time:H:i|8:15 +6 hours}} resulta 14:15
- {{#time:m/Y|-1 months}}resulta 10/2006 (1 mês atrás)
[editar] Faixa
A faixa de funcionamento correto é 1-1-1970 00:00:01 até 19-1-2038 03:14:07 (1 até 231 1 segundos após o início de 1970). Veja também Problema do ano 2038.
[editar] Advertências
[editar] Tabelas
Atualmente as barras verticais nas sintaxes de tabelas não funcionam dentro de condicionais. Há duas maneiras de contornar o problema.
- Utilizar uma predefinição que seja constituída apenas de uma barra vertical, tal como {{!}}.
- Utilizar sintaxe html.
[editar] Expressões
- div não é a divisão inteira, utilize / para divisão de números reais.
- mod utiliza o operador PHP %, que é diferente do operador módulo em outras linguagens de programação
- mod algumas vezes retornas resultados errados para a mesma entrada de valores, veja 6356 e m:ParserFunctions/MOD10000. valores menores que 1E+12 aparentemente não são afetadas.
- Resultados válidos de #expr: como 1E-07 ainda não são suportados como valor de entrada
- {{#expr:1E-07}} resulta Expression error: Unrecognised word "e".
- Sob certas condições, round 0 resulta em -0 ao invés de 0. Para uma expressão x, utilizando 0+(x) conserta essa falha.
[editar] Espaços brancos de condicionais
Se você apenas deseja inserir espaços em brancos, você pode utilizar a entidade do HTML  
, que insere " ".
se você deseja novas linhas ou outros espaços em branco, você pode inserir caracteres não imprimíveis entre a barra vertical e o espaço em branco:
primeiro parágrafo. {{#if:{{{paragráfo}}}|<nowiki /> segundo parágrafo.}}
primeiro parágrafo.
segundo parágrafo.
[editar] Veja também
- m:ParserFunctions
- m:Help:Calculation
- m:Help:Magic words
- m:Category:Templates using ParserFunctions
- Categoria:Predefinições que usam ParserFunctions