Ajuda:Funções sintáticas: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
início
 
m
Linha 1:
Esta extensão do MediaWiki é uma coleção de funções de [[Parser|análise sintática]] ([[Parser|ParserFunctions]]). Essas funções de análise sintática possuem uma [[cerquilha]] (#) na frente de seus nomes nomes, adquirindo, portanto, a seguinte sintaxe:
 
:<nowiki>{{</nowiki>#nomedafunção: argumento 1 | argumento 2 | argumento 3...}}
Linha 15:
=== #expr: ===
 
A função <tt>expr</tt> computa matematicamente expressões baseadas na permutação de números (ou [[variável|variáveis]]/[[parâmetro]]s que resultam em números) e operadores. Ele '''não''' funciona com strings''[[string]]s'' (cadeias de caracteres); para tal propósito, utilize a função <tt>ifeq</tt>. A sintaxe é:
 
<nowiki>{{</nowiki> #expr: ''expressão'' }}
 
UmaSegue abaixo uma lista de operadores suportados esta é abaixo. Para maiores detalhes sobre a precedência de operadores, veja [[:enm:Help:Calculation]],.
 
deDe 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 (=, !=, &lt;, &gt;, etc.), '''(7)''' AND lógico, '''(8)''' OR lógico.
OperadoresQuando existirem operadores com a mesma classe de precedência, os cálculos são resolvidos os cálculos da esquerda para direita. Como sempre, alguns parênteses redundantes são melhores do que um código conciso e errado.
 
{| cellpadding="6px" border=1 style="border:1px solid #C0C0C0; border-collapse:collapse;"
Linha 28 ⟶ 29:
! ''Exemplo''
|-
|rowspan="2" colspan="2" align="center"| nonenenhum
||<nowiki>{{#expr: 123456789012345}}</nowiki> = {{#expr: 123456789012345}}
|-
Linha 62 ⟶ 63:
|-
! mod
|| "Módulo",&#160;resto da divisão após "truncar" ambos operadoresemoperadores em números inteiros.<br />Atenção, '''div''' e '''mod''' são diferentes de todosdas asdemais linguagens de programação.
||<nowiki>{{#expr: 30 mod 7}}</nowiki> = {{#expr: 30 mod 7}}<br />{&#123;#expr: <tt>-</tt>8 mod <tt>-</tt>3&#125;} = {{#expr: -8 mod -3}}<br />{&#123;#expr: <tt>-</tt>8 mod <tt>+</tt>3&#125;} = {{#expr: -8 mod +3}}<br /><nowiki>{{#expr: 8 mod 2.7}}</nowiki> = {{#expr: 8 mod 2.7}}<br /><nowiki>{{#expr: 8 mod 3.2}}</nowiki> = {{#expr: 8 mod 3.2}}<br /><nowiki>{{#expr: 8.9 mod 3}}</nowiki> = {{#expr: 8.9 mod 3}}
|-
Linha 82 ⟶ 83:
|-
! &lt;&gt;
|| InigualdadeDesigualdade, o mesmo que '''!='''
||<nowiki>{{#expr: 30 &lt;&gt; 7}}</nowiki> = {{#expr: 30 <> 7}}
|-
!| !=
|| Desigualdade, o mesmo que '''&lt;&gt;''', ''xor'' lógico
||<nowiki>{{#expr: 1 != 0}}</nowiki> = {{#expr: 1 != 0}}
|-
Linha 114 ⟶ 115:
|}
 
Os [[Álgebra booleana|operadores booleanos]] consideram '''0''' como "falso" e qualquer outro número como "verdadeiro",; uma saída "verdadeira" é mostrada como '''{{#expr: 30 and 7}}'''.
 
Números utilizam "." como marcaçãosímbolo decimal. A função <code>[[:enm:Help:Magic words#Formatting|formatnum:]]</code> pode ser utilizada para mudar o ponto decimal para uma vírgula nos países e locais apropriadosonde isto for apropriado. A notação científica com <tt>E</tt> mais expoente ainda não é suportada como entrada de expressões, mas é utilizada nas saídas,; para maiores detalhes veja [[:enm:Help:Calculation]].
 
=== #if: ===
Linha 124 ⟶ 125:
{&#123; #if: ''&lt;condição&gt;'' | ''&lt;então texto&gt;'' | ''&lt;senão texto&gt;'' }}
 
Se a condição é uma string vazia ou consiste apenas de espaços em branco, então é considerada como falsa, e o 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, noa casocondição dofor resultadofalsa, a função seriadevolve um texto vazio se a condição for falsa.
 
Um examplo:
Linha 131 ⟶ 132:
<nowiki> | | |</nowiki>
<nowiki> | | |</nowiki>
<nowiki>{{ #if: {{{parâmetro|}}} | Parâmetro é definido. | Parâmetro não definido ou vazio }} </nowiki>
 
Note que a função <tt>if</tt> '''não''' suporta sinais de "=" sou expressões matemáticas. <nowiki>{{#if: 1 = 2|sim|não}}</nowiki> irá devolver "sim", porque a string "1 = 2" não é vazia.
Linha 137 ⟶ 138:
=== #ifeq: ===
 
<tt>ifeq</tt> compara duas strings ou números, e retorna outra string dependendo do resultado da comparação. A sintaxersintaxe é:
 
<nowiki>{{</nowiki> #ifeq: ''&lt;texto 1&gt;'' | ''&lt;texto 2&gt;'' | ''&lt;igual texto&gt;'' | ''&lt;não igual texto&gt;'' }}
Linha 146 ⟶ 147:
:<tt>{&#123; #ifeq:"+07"|"007"| 1 | 0 &#125;}</tt> resulta {{#ifeq:"+07"|"007"| 1 | 0 }}
 
ComparaçãoA comparação de uma string é caso -sensitivo:
:<tt>{&#123; #ifeq: A | a | 1 | 0 &#125;}</tt> resulta {{#ifeq: A | a | 1 | 0 }}
<!--
Linha 158 ⟶ 159:
=== #ifexist: ===
 
<tt>ifexist</tt> retorna um de dois resultados, baseadosbaseado se existe ou não um artigo ou página com o título especificado. Exemplos:
 
:<code><nowiki>{{#ifexist:Wikipédia|Sim|Não}}</nowiki></code> resulta {{#ifexist:Wikipédia|Sim|Não}}, porque [[Wikipédia]] existe
Linha 176 ⟶ 177:
 
;O ''senão texto'' também é mostrado para expressões vazias&#58;
:<code><nowiki>{&#123;#ifexpr: {&#123;ns:0&#125;}|Presente|'''ou então'''&#125;}</nowiki></code> givesresulta {{#ifexpr: {{ns:0}}|Presente|'''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 menssagemmensagem de erro (emulando ''afirmação'', erros forçados)&#58;
:<code>{&#123;#ifexpr: 1/{&#123;#ifeq: {&#123;ns:4&#125;}|Meta|1|0&#125;}&#125;}</code> {{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|1|0}}}}
:<code>{&#123;#ifexpr: 1/{&#123;#ifeq: {&#123;ns:4&#125;}|Meta|0|1&#125;}&#125;}</code> {{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|0|1}}}}
Linha 186 ⟶ 187:
 
=== #switch: ===
<code>switch</code> compara um único valor contrade muitoscomparação com vários outros, retornando uma string se encontrar oum valor igual. A sintaxe é basicamente:
 
<nowiki>{{</nowiki> #switch: ''&lt;valor de comparação&gt;''
Linha 196 ⟶ 197:
}}
 
<code>switch</code> 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 foifor encontrado, mase o último item não possuipossuir sinal de igualdade nele, 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 <code>#default</code>:
 
<nowiki>{{</nowiki> #switch: ''&lt;valor de comparação&gt;''
Linha 203 ⟶ 204:
}}
 
Note que é também possível também abortar valores (reduzindo a necessidade de resultados duplicados). Por exemplo:
 
<nowiki>{{</nowiki> #switch: ''&lt;valor de comparação&gt;''
Linha 214 ⟶ 215:
}}
 
Note que o valor<sub>1</sub> e valor<sub>2</sub> não possuem o sinal de igualdade. Se eles forem encontrados, eleeles darão o resultado do valor<sub>3</sub> (isto é, o que está no resultado<sub>3</sub>).
 
;Assim como para [[##ifeq:|#ifeq:]], a comparação numérica é ondenumérica quando possível&#58;
:<tt>{&#123; #switch: +07 | 7 = Sim | 007 = Bond | Não &#125;}<tt> resulta {{ #switch: +07 | 7 = Sim | 007 = Bond | Não }}
:<tt>{&#123; #switch:"+07"|"7"= Sim |"007"= Bond | Não &#125;}<tt> resulta {{ #switch:"+07"|"7"= Sim |"007"= Bond | Não }}
;O valor encontrado pode ser vazio,; assim sendo, as seguintes estruturas são equivalentes&#58;
:<tt>{&#123; #if: {&#123;ns:0&#125;} | não vazio | vazio &#125;}<tt> resulta {{ #if: {{ns:0}} | não vazio | vazio }}
:<tt>{&#123; #switch:{&#123;ns:0&#125;}|=vazio|não vazio &#125;}<tt> resulta {{ #switch:{{ns:0}}|=vazio|não vazio }}
Linha 227 ⟶ 228:
:<tt>{&#123; #switch: A | a=0 | 1 &#125;}</tt> resulta {{#switch: A | a=0 | 1 }}
 
Não deve-se deve confundir isso com o fato de que as funções de análise sintática são caso-sensitivo:
:<tt>{&#123; #swItch: A | a=0 | 1 &#125;}</tt> resulta {{#swItch: A | a=0 | 1 }}
 
Linha 273 ⟶ 274:
|--------------
| N
| O dia da semana segundo codcód. ISO 8601
| 1 (para Segunda) a 7 (para o Domingo)
| {{#time:N}}
Linha 303 ⟶ 304:
|--------------
| M
| UmaA abreviação do nome do mês.
| Jan
| {{#time:M}}
Linha 353 ⟶ 354:
|--------------
| h
| horas (formato de 12 horas) acompanhadoacompanhada por zero
| 01 até 12
| {{#time:h}}
Linha 424 ⟶ 425:
 
====Faixa====
A faixa de funcionamento é correto é 19701-1-11970 00:00:01 até 203819-1-192038 03:14:07 (1 até <math>2^{31}</math> 1 segundos após o início de 1970). Veja também [[Problema do ano 2038]].
 
==Advertências==
Linha 446 ⟶ 447:
*Resultados válidos de [[#.23expr:|#expr:]] como {{#expr: 0.0000001}} ainda não são suportados como valor de entrada
*:<nowiki>{{#expr:</nowiki>{{#expr:0.0000001}}<nowiki>}}</nowiki> resulta ''{{#expr:{{#expr:0.0000001}}}}''.
*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.
 
===Espaços brancos de condicionais===
Linha 463 ⟶ 464:
==Veja também==
*[[:m:ParserFunctions]]
*[[:enm:Help:Calculation]]
*[[:enm:Help:Magic words]]
*[[:Categoria:Predefinições utilizando ParserFunctions]]
*[[:m:Category:Templates using ParserFunctions]]
*[[:Categoria:Predefinições utilizando ParserFunctions]]
 
=={{Ligações externas}} ==