Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Template:If

Permanently protected template
From Wikipedia, the free encyclopedia

{{ safesubst:p{{ safesubst:#if{{{1}}}:{{{2}}}|1|2}}|{{{3}}}|}}

Template documentation[view] [edit] [history] [purge]
WarningThis template is used onapproximately 419,000 pages.
To avoid major disruption and server load, any changes should be tested in the template's/sandbox or/testcases subpages, or in your ownuser subpage. The tested changes can be added to this page in a single edit. Consider discussing changes on thetalk page before implementing them.
This template can only be edited byadministrators because it istranscluded onto one or morecascade-protected pages.

With this template theparser functions of theParserFunctions collection with names starting with "#if" can be used in a way such that they do notstrip spaces and newlines from the "then" and "else" part. Spaces still do not affect the outcome of the condition. Parameter 1 selects the if-type as "eq", "expr", "exist" or "error" (for #iferror), or empty "||" for a simple if-there (for #if). The template can be repeatedly nested 6 or 7 levels, one inside the other, because the outer-most is completed before running either the then/else inner levels.

This template can be substituted, when the expression or comparison will not change. Functionally, a lead-space character is stored, internally, as a simple blank character. Note, in many cases a null nowiki tag ("<nowiki />") could be used, withoutTemplate:If, to allow a lead-space (such as "<nowiki /> xx") anywhere, but the internal storage puts a 43-character marker for "<nowiki />" in string length. However, there is no extra expansion depth for a nowiki-tag, such as in trailing space, "zz <nowiki />".

Usage

Where p is output for a true statement and q is output for a false statement.

  • {{if||x| p| q}} gives " p ". Notice the empty first parameter, seen as two adjacent vertical bars.
  • {{if|expr|2<3| p| q}} gives " p "
  • {{if|eq| u|u| p| q}} gives " p "
  • {{if|exist| Help:Link| p| q}} gives " p "
  • {{if|error|{{#expr:x}}| p| q}} gives " p "

Compare:

  • {{#if:x| p| q}} gives "p"
  • {{#ifexpr:2<3| p| q}} gives "p"
  • {{#ifeq: u|u| p| q}} gives "p"
  • {{#ifexist: Help:Link| p| q}} gives "p"
  • {{#iferror:{{#expr:x}}| p| q}} gives "p"

For example, with a template namedTemplate:Template name containing the code{{#ifeq:{{{parameter}}}|u| p| q}}, entering the code{{Template name|parameter=u}} into an article gives "p", but{{Template name|parameter=v}} gives "q".

The text of either the then-clause or else-clause is only processed and expanded when triggered. Hence, any templates in use are only expanded once the then-clause or else-clause is matched, otherwise they are skipped as merely paired braces, "{{" with "}}".

Indentation

If indenting the markup, care must be taken to avoid extra newlines when indenting "}}" on the next line. An extra bar pipe "|" can be added after the else-clause to complete that text, and allow "}}" to then be placed anywhere without adding a newline into the else-clause. For example:

  • {{if|{{{1|}}}|then found parameter 1|else no parameter 1| ← extra "|" ends else-clause}}

When the else-clause is indented to the next line, a newline (CR/LF) is added:

  • {{if|{{{1|}}}|then found parameter 1 ← extra newline here|else noparameter 1|}}

To indent the else-clause, split anHTML-form comment, as "<!--" with next line as "-->|else...". Unless each then-clause and else-clause is carefully tested, to watch for extra newlines, then the results are likely to cause broken lines, with extra line breaks for each newline. For that reason, a global edit with simple search-and-replace of "{#if:" to "{if||" is likely to leave newline problems, wherever the original markup was wrapped to indent either the else-clause or "}}" of each if-structure. Indenting the then-clause is not a problem.

Performance considerations

BecauseTemplate:If must prepare the parameters for#if, #ifeq, #ifexpr, (etc.) there is a slight overhead when using it. Each nested use adds 5 levels to the template expansion depth, so 7 nested if-templates would use 35 levels (5*7) of the41-level limit.

Using P-if syntax: A similar if-structure can be coded withoutTemplate:If, by using the{{P1}} and{{P2}} templates in a "P-if" structure.Template:P1 always returns parameter 1, and P2 returns the 2nd. So, a comparison of 4 versus 3 can be coded using P-if syntax form:

Example of#ifexpr:"{{P{{#ifexpr: 4 > 3|1|2}}| then 4 greater| else 4 lower}}"
Result for#ifexpr:   " then 4 greater" ←the comparison invoked {{P1}}.

The expansion depth of a P-if is only 4 levels deep, but nesting of the then-clause or else-clause might be more confusing than using nested levels of Template:if.

Example of#if:"{{P{{#if:{{{2|x}}}|1|2}}| then {2} set| else {2} empty}}"
Result for#if: " else {2} empty" ←the comparison invoked {{P2}}.

See also

The abovedocumentation istranscluded fromTemplate:If/doc.(edit |history)
Editors can experiment in this template'ssandbox(edit |diff) and testcases(create) pages.
Add categories to the/doc subpage.Subpages of this template.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Template:If&oldid=1208352575"
Category:
Hidden category:

[8]ページ先頭

©2009-2025 Movatter.jp