Manual wiki/Palabras mágicas/La función switch

De Wikilibros, la colección de libros de texto de contenido libre.

Índice de la sección
«Palabras mágicas»


Para más información visite Switch parser function

Esta función compara un valor de entrada con varios casos de prueba, devolviendo una cadena asociada si se encuentra una coincidencia.

{{#switch:''comparison string''
| ''case'' = ''result''
| ''case'' = ''result''
| ''...''
| ''case'' = ''result''
| ''default result''
}}
Ejemplos
{{#switch:baz|foo=Foo|baz=Baz|Bar}}Baz
{{#switch:foo|foo=Foo|baz=Baz|Bar}}Foo
{{#switch:zzz|foo=Foo|baz=Baz|Bar}}Bar

#switch con etiquetas de transclusión parcial puede afectar a un archivo de configuración que permite a un editor que no esté familiarizado con la codificación de plantillas ver y editar elementos configurables.

Valores predeterminados[editar]

The default result is returned if no case string matches the comparison string:

{{#switch: test | foo = Foo | baz = Baz | Bar }} Bar

In this syntax, the default result must be the last parameter and must not contain a raw equals sign (an equals sign without {{}}).

If it does, it will be treated as a case comparison, and no text will display if no cases match.

This is because the default value has not been defined (is empty).

If a case matches however, its associated string will be returned.

{{#switch: test | Bar | foo = Foo | baz = Baz }} →
{{#switch: test | foo = Foo | baz = Baz | B=ar }} →
{{#switch: test | test = Foo | baz = Baz | B=ar }} → Foo
{{#switch: ''comparison string''
| ''case'' = ''result''
| ''case'' = ''result''
| ''...''
| ''case'' = ''result''
| #default = ''default result''
}}

Alternatively, the default result may be explicitly declared with a case string of "#default".

Default results declared in this way may be placed anywhere within the function:

{{#switch: test | foo = Foo | #default = Bar | baz = Baz }} Bar

If the default parameter is omitted and no match is made, no result is returned:

{{#switch: test | foo = Foo | baz = Baz }}

Grouping results[editar]

{{#switch: ''comparison string''
| ''case1'' = ''result1''
| ''case2'' 
| ''case3'' 
| ''case4'' = ''result234''
| ''case5'' = ''result5''
| ''case6'' 
| ''case7'' = ''result67''
| #default = ''default result''
}}

It is possible to have 'fall through' values, where several case strings return the same result string. This minimizes duplication.

Here cases 2, 3 and 4 all return result234; cases 6 and 7 both return result67.

The "#default = " in the last parameter may be omitted in the above case.

Use with parameters[editar]

The function may be used with parameters as the test string.

In this case, it is not necessary to place the pipe after the parameter name, because it is very unlikely that you will choose to set a case to be the string "{{{parameter name}}}".

This is the value the parameter will default to if the pipe is absent and the parameter doesn't exist or have a value.

{{#switch: {{{1}}} | foo = Foo | baz = Baz | Bar }}

In the above case, if {{{1}}} equals foo, the function will return Foo.

If it equals baz, the function will return Baz.

If the parameter is empty or does not exist, the function will return Bar.

As in the section above, cases can be combined to give a single result.

{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | Bar }}

Here, if {{{1}}} equals foo, zoo or roo, the function will return Foo.

If it equals baz, the function will return Baz.

If the parameter is empty or does not exist, the function will return Bar.

Additionally, the default result can be omitted if you do not wish to return anything if the test parameter value does not match any of the cases.

{{#switch: {{{1}}} | foo = Foo | bar = Bar }}

In this case, the function returns an empty string unless {{{1}}} exists and equals foo or bar, in which case it returns Foo or Bar, respectively.

This has the same effect as declaring the default result as empty.

{{#switch: {{{1}}} | foo | zoo | roo = Foo | baz = Baz | }}

If for some reason you decide to set a case as "{{{parameter name}}}", the function will return that case's result when the parameter doesn't exist or doesn't have a value. The parameter would have to exist and have a value other than the string "{{{parameter name}}}" to return the function's default result.

(when {{{1}}} doesn't exist or is empty):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Foo
(when {{{1}}} has the value "test"):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Bar
(when {{{1}}} has the value "{{{1}}}"):
{{#switch: {{{1}}} | {{{1}}} = Foo | baz = Baz | Bar }} Foo

In this hypothetical case, you would need to add the pipe to the parameter ({{{1|}}}).

Comparison behavior[editar]

As with #ifeq, the comparison is made numerically if both the comparison string and the case string being tested are numeric; or as a case-sensitive string otherwise:

{{#switch: 0 + 1 | 1 = one | 2 = two | three}} → three
{{#switch: {{#expr: 0 + 1}} | 1 = one | 2 = two | three}} → one
{{#switch: 02 | +1 = one | +2 = two | three}} → two
{{#switch: 100 | 1e1 = ten | 1e2 = hundred | other}} → hundred
{{#switch: a | a = A | b = B | C}} → A
{{#switch: A | a = A | b = B | C}} → C

A case string may be empty:

{{#switch: | = Nothing | foo = Foo | Something }}Nothing

Once a match is found, subsequent cases are ignored:

{{#switch: b | f = Foo | b = Bar | b = Baz | }}Bar

Numerical comparisons with #switch and #ifeq are not equivalent to comparisons in expressions (see also above):

{{#switch: 12345678901234567 | 12345678901234568 = A | B}} → B
{{#ifexpr: 12345678901234567 = 12345678901234568 | A | B}} → A

Raw equal signs[editar]

"Case" strings cannot contain raw equals signs. To work around this, use the {{=}} magic word, or replace equals sign with HTML code =.

Example
You type You get
{{#switch: 1=2
 | 1=2 = raw
 | 1=2 = nowiki
 | 1{{=}}2 = template
 | default
}}
template
{{#switch: 1=2
 | 1=2 = html
 | default
}}
html
Nota:
For a simple real life example of the use of this function, check Template:NBA color. Two complex examples can be found at Plantilla:Ll and w:Template:BOTREQ.


Replacing #ifeq[editar]

{{#ifeq:{{{1}}}|condition1
  |<!--then-->branch1
  |<!--else-->{{#ifeq:{{{1}}}|condition2
                |<!--then-->branch2
                |<!--else-->{{#ifeq:{{{1}}}|condition3
                              |<!--then-->branch3
                              |<!--else-->branch4}}}}}}

#switch can be used to reduce expansion depth.

For example
  • {{#switch:{{{1}}} |condition1=branch1 |condition2=branch2 |condition3=branch3 |branch4}}

is equivalent to

  • {{#ifeq:{{{1}}}|condition1 |branch1 |{{#ifeq:{{{1}}}|condition2 |branch2 |{{#ifeq:{{{1}}}|condition3 |branch3 |branch4}}}}}}

i.e. deep nesting, linear:

{{#ifeq:{{{1}}}|condition1
 |<!--then-->branch1t{{
  #ifeq:{{{1}}}|condition2
   |<!--then-->branch1t2t{{#ifeq:{{{1}}}|condition4|<!--then-->branch1t2t4t|<!--else-->branch1t2t4e}}
   |<!--else-->branch1t2e{{#ifeq:{{{1}}}|condition5|<!--then-->branch1t2e5t|<!--else-->branch1t2e5e}}
  }}
 |<!--else-->branch1e{{#ifeq:{{{1}}}|condition3
   |<!--then-->branch1e3t{{#ifeq:{{{1}}}|condition6|branch1e3t6t|branch1e3t6e}}
   |<!--else-->branch1e3e{{
    #ifeq:{{{1}}}|condition7
     |branch1e3e7t
     |branch1e3e7t
    }}
  }}
}}

On the other hand, the switch replacement could be complicated/impractical for IFs nested in both branches (shown with alternatives of indentation, indented on both sides), making full symmetrical tree:

Índice de la sección «Palabras mágicas»

3/3 Introducción3/3 Opciones de comportamiento0/3 Variables de fecha y hora0/3 Variables de metadatos técnicos0/3 Variables de estadísticas0/3 Variables de espacios de nombres0/3 Otras variables0/3 Funciones de metadatos0/3 Funciones de datos de URL0/3 Funciones de espacios de nombres0/3 Funciones de formato0/3 Funciones de localización0/3 Funciones modificadoras de transclusión3/3 Otras funciones0/3 La función expr0/3 La función if0/3 La función ifeq0/3 La función iferror0/3 La función ifexpr0/3 La función ifexist0/3 La función rel2abs3/3 La función switch0/3 La función time0/3 La función timel0/3 La función titleparts



Manual wiki
ÍndiceIntroducciónEnlaces
Los proyectos WikimediaEdiciónUsando el entorno wikiAnexo
Fundación Wikimedia Wikipedia Wikcionario Wikiquote Wikilibros Wikisource Wikispecies Wikinoticias Wikiversidad Wikiviajes Commons Wikidata MediaWiki Meta-Wiki Incubadora de Wikimedia Wikimedia Labs