Шаблон:If
{{ safesubst:p{{ safesubst:#if{{{1}}}:{{{2}}}|1|2}}|{{{3}}}|}}
Овим шаблоном парсер функције колекције парсер функција са именима која почињу на „#if” могу бити коришћене на начин да не „чисте” размаке и нове редове из „then” и „else” делова. Размаци и даље не утичу на резултат услова. Параметар 1 одабире тип као што је „eq”, „expr”, „exist” или „error” (за #iferror), или празно „||” за обично „if-there” (за #if). Шаблон може бити угнежђиван до 6 или 7 пута, са једним нивоом унутар другог, зато што се прво завршавају радње оних вањских нивоа пре then/else унутрашњих нивоа.
Овај шаблон се може супституисати, и то када се израз или поређење не мења. Функционално, водећи карактер размака се спрема интерно као једноставни празан карактер. Имати на уму да нулти новики таг („<nowiki/>”) може бити коришћен без шаблона If како би се омогућило коришћење водећег размака (као на пример „<nowiki/> xx”) било где, али интерна меморија спрема 43-знаковну ознаку за „<nowiki/>” у дужини стринга. Како год, нема додатне експанзионе дубине за новики таг, као што је то случај са пратећим размаком, „zz <nowiki/>”.
Употреба
[уреди извор]- {{if||x| p | q }} даје „ p ” [Приметите пар вертикалних црта око првог празног параметра.]
- {{if|expr|2<3| p | q }} даје „ p ”
- {{if|eq| u |u| p | q }} даје „ p ”
- {{if|exist| Помоћ:Уређивање | p | q }} даје „ p ”
- {{if|error|{{#expr:x}}| p | q }} даје „ p ”
Упореди („{{if|тип|...
” се мења са „{{#ifтип:...
”):
- {{#if:x| p | q }} даје „p” [Приметите да размаци око p односно q не бивају исписани.]
- {{#ifexpr:2<3| p | q }} даје „p”
- {{#ifeq: u |u| p | q }} даје „p”
- {{#ifexist: Помоћ:Уређивање | p | q }} даје „p”
- {{#iferror:{{#expr:x}}| p | q }} даје „p”
Текст then-клаузе или else-клаузе се процесира и проширује само када је активиран нечим. Дакле, било који шаблони у употреби су активирани само када се then-клауза или else-клауза поклапа; у осталим случајевима се прескачу као обичне упарене заграде, „{{” са „}}”.
Увлачење (енгл. Indentation): Уколико се означавање (код) увлачи, мора се водити рачуна о томе како избећи нове редове (линије) при увлачењу „}}” у следећем реду. Додатна вертикална црта „|” се може додати после else-клаузе да би се завршио текст и омогућило постављање „}}” било где без додавања додатног реда у else-клаузу. На пример:
- {{if|{{{1|}}}
|резултат ако је параметар 1 дефинисан|резултат ако параметар 1 није дефинисан| ← додатна "|" завршава else-клаузу
}}
- {{if|{{{1|}}}
Када се else-клауза увлачи у следећи ред, нови ред (CR/LF) треба бити додат:
- {{if|{{{1|}}}
|резултат ако је параметар 1 дефинисан ← додатни нови ред иде овде
|резултат ако параметар 1 није дефинисан|
}}
- {{if|{{{1|}}}
Да би се else-клауза увукла, може се користити и HTML коментар у облику „<!--” раздвојен у следећи ред као „-->|резултат ако параметар 1 није дефинисан...”. Осим у случајевима када је свака then-клауза и else-клауза пажљиво тестирана да би се пронашли евентуални нежељени редови, резултат ће вероватно бити преломи, са додатним преломима за сваки нови ред. Због овога, глобално уређивање са једноставним search-and-replace-ом (замењивањем) „{#if:
”-а у „{if||
” вероватно ће решити проблеме са преломима кад год је оригинално означавање wrap-овано да би се увукла else-клауза или „}}” сваке if-структире. Увлачење then-клаузе не представља никакав проблем.
Разматрања перформанси
[уреди извор]Пошто шаблон If мора припремити параметре за #if, #ifeq, #ifexpr
итд. постоје и неке лимитације овог шаблона. Темпиран је да ради при брзинама од 290 случајева у секунди, тако да процесирање 29 случајева узима само 0,1 s, десетину секунде за 29 поређења. Свака угнежђена употреба експанзионој дубини додаје 5 нивоа, тако да 7 угнежђених if-шаблона садржава 5*7=35 нивоа (лимит је 41 ниво).
Коришћење P-if синтаксе: Слична if-структура може бити кодирана без шаблона If, користећи {{P1}} и {{P2}} шаблоне у „P-if” структури. Шаблон P1 увек враћа параметар 1, а P2 параметар 2. Дакле, поређење 4 напрема 3 може бити кодирано користећи P-if синтаксу у облику:
- Пример за
#ifexpr
: „{{P{{#ifexpr: 4 > 3|1|2}}| 4 је веће| 4 је мање}}” - Резултат за
#ifexpr
: „ 4 је веће” ← позвано поређење {{P1}}.
- Пример за
Експанзиона дубина за P-if има вредност од само 4 нивоа, док угнежђивање then-клаузе или else-клаузе може бити више збуњујуће од коришћења угнежђених нивоа шаблона If.
- Пример за
#if
: „{{P{{#if:{{{2|x}}}|1|2}}| резултат ако је {2} попуњен| резултат ако је {2} празан}}" - Резултат за
#if
: „ резултат ако је {2} празан” ← позвано поређење {{P2}}.
- Пример за
Види још
[уреди извор]- m:Шаблон:If
- Шаблон:Ifnotempty — за једноставност и смањивање лимитација насталих услед лимита експанзионе дубине, посебан шаблон који се слаже само са шаблоном #if
- Шаблон:Switch — за подразумевани резултат