فرما:If

وِکیٖپیٖڈیا پؠٹھٕ، اَکھ آزاد اِنسایکلوپیٖڈیا

| valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |

| valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
| style="border-bottom:2px solid #D8E9FC" width="3" | 

| style="border-bottom:2px solid #D8E9FC" width="3" | 

| style="border-bottom:2px solid #D8E9FC" width="3" |  "

  • {{if|exist| Help:Link | p | q }} gives "| valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
    | valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
    q

| style="border-bottom:2px solid #D8E9FC" width="3" | 

| style="border-bottom:2px solid #D8E9FC" width="3" | "

  • {{if|error|{{#expr:x}}| p | q }} gives "| valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
    | valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
    q

| style="border-bottom:2px solid #D8E9FC" width="3" | 

| style="border-bottom:2px solid #D8E9FC" width="3" | "

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 "q"
  • {{#iferror:{{#expr:x}}| p | q }} gives "p"

For example, with a template named Template: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 an HTML-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[اؠڈِٹ]

Because Template:If must prepare the parameters for #if, #ifeq, #ifexpr, (etc.) there is a slight overhead when using it. It has been timed to run at speeds of 290 instances per second, so 29 uses would take only 0.1 s, a tenth of a second to run, to make 29 comparisons. Each nested use adds 5 levels to the template expansion depth, so 7 nested if-templates would use 35 levels (5*7) of the 41-level limit.

Using P-if syntax: A similar if-structure can be coded without Template: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:   "| style="padding:0; background-color: #D8E9FC; line-height:0.95em; font-weight:bold;" valign="top" width="20" |
then 4 greater

| style="border-bottom:2px solid #D8E9FC" width="3" |  " ← 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: "| valign="top" style="border-bottom:2px solid #D8E9FC; background-color:#f2f5fd; font-size:90%; line-height:0.95em; margin: 0; padding: 0" width="20" |
then {2} set

| style="border-bottom:2px solid #D8E9FC" width="3" | " ← the comparison invoked {{P2}}.

See also[اؠڈِٹ]