Template:If/doc: Difference between revisions

[checked revision][checked revision]
Content deleted Content added
Created page with "{{stack|{{Documentation subpage}}{{high-risk}}}}{{Commons Import}} With this template the parser functions of the mw:Help:Extension:ParserFunctions|..."
 
No edit summary
 
Line 1:
{{stack|{{Documentation subpage}}{{high-risk}}}}{{Commons Import}}
With this template the [[Wikipedia:Help:parser function|parser functions]] of the [[mwmediawikiwiki:Help:Extension:ParserFunctions|ParserFunctions]] collection with names starting with "#if" can be used in a way such that they do not [[m:Help:Newlines_and_spaces#Stripping_on_expansion|strip 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, without [[Template: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/>".
Line 35:
|else noparameter 1|
}}</syntaxhighlight>
To indent the else-clause, split an [[Wikipedia:HTML|HTML]]-form comment, as "<code>&lt;!--</code>" with next line as "<code>--&gt;|else...</code>". 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 "<code>{#if:</code>" to "<code>{if||</code>" 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 <code>#if, #ifeq, #ifexpr,</code> (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&nbsp;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 [[mmediawikiwiki:Help:Expansion_depth|41-level limit]].
 
'''Using P-if syntax:''' A similar if-structure can be coded without '''Template:If''', by using the {{tlx|P1}} and {{tlx|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:
Line 49:
 
==See also==
*[[m:Template:If]]
*[[Template:Ifnotempty]] - for simplicity and to reduce the limitations due to the expansion depth limit, this is a separate template corresponding to #if only.
*[[Template:Switch]], for a default result
*[[Wikipedia:Help:Conditional expressions|Help:Conditional expressions]]
<includeonly>{{Sandbox other||
[[Category:If-then-else templates]]