Шаблон: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-клаузу
    }}

Када се else-клауза увлачи у следећи ред, нови ред (CR/LF) треба бити додат:

  • {{if|{{{1|}}}
        |резултат ако је параметар 1 дефинисан ← додатни нови ред иде овде
        |резултат ако параметар 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 — за подразумевани резултат