Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

На этой странице « Справка: условные выражения» описаны способы отображения различных результатов в зависимости от условий проверки на странице или в шаблоне . Эти функции синтаксического анализа , используемые для оценки условных выражений включают имена функций: #ifexpr, #ifeq, #switch, #if, и #iferrorили #ifexist. Каждое имя функции связано с пояснениями ниже.

  • С помощью #ifeqможно сравнить 2 строки или числа.
  • Но #ifexprможно проверить математическую формулу или несколько условий.
  • #switchФункция может расшириться в десятки или сотни различных путей в зависимости от значения, выступать в качестве саза выбора среди альтернатив.
  • Использование #ifможет проверить, был ли передан параметр, или оценивается ли выражение как истинное.
  • Использование #iferrorможет проверить, вызывает ли значение выражения ошибку, в противном случае отображается значение.
  • Пока #ifexistможно проверить, существует ли еще имя страницы или файл изображения / мультимедиа.

Обратите внимание, что все лишние пробелы внутри внешних фигурных скобок удаляются, поэтому это позволяет отформатировать эти конструкции для лучшей читаемости. Например:

{{#if: {{{ xx | }}} | параметр xx передан | параметр xx опущен}}

В тексте появляются только пробелы по обе стороны от xx.

Сводка условных выражений [ править ]

Быстрый формат каждой функции следующий (вы можете увидеть примеры функций ниже):

  • {{#if: test string | value if non-empty | value if empty }} (выбирает одно из двух значений в зависимости от того, пуста ли тестовая строка)
  • {{#ifeq: string 1 | string 2 | value if equal | value if unequal }} (выбирает одно из двух значений в зависимости от того, равны ли тестовые строки - численно, если применимо)
  • {{#iferror: test string | value if error | value if correct }} (выбирает значение в зависимости от того, генерирует ли тестовая строка ошибку парсера)
  • {{#ifexpr: expression | value if true | value if false }} (выбирает значение на основе оценки выражения)
  • {{#ifexist: page title | value if exists | value if doesn't exist }} (выбирает значение в зависимости от того, существует ли заголовок страницы)
  • {{#switch: test | case1 = value for case 1 | ... | default }}(предоставляет альтернативы на основе значения тестовой строки; см. тестовые примеры .)
  • {{#expr: expression }}(оценивает данное выражение; см. Справка: Расчет )

В волшебных словах могут быть использованы вместе, в комбинации вложенной, расшириться на сложных условиях. Некоторые комбинации могут использовать уловки, основанные на взаимодействии между ними.

Обратите внимание , что с #ifвыражениями, используя позиционный параметр , это, параметр в форме "{{{1}}}"всегда требует окончательной вертикальной полосы "|" в параметре: {{{1|}}}. Если полоса / вертикальная черта опущена, то всякий раз, когда параметр 1 отсутствует, вместо того, чтобы оставлять поле пустым, на странице будет использоваться буквальный текст " {{{1}}}" (как 3 набора фигурных скобок вокруг "1"), и #ifбудет Значение true, если параметр 1 не передается как пустая строка, например «1 =».

Использование #if[ править ]

Использование #ifможет проверить, был ли передан параметр.

Эта функция оценивает тестовую строку и определяет, пуста она или нет. Тестовая строка, содержащая только пробелы, считается пустой.

:{{#if: test string | value if test string is not empty | value if test string is empty (or only white space) }}

Примеры:

{{#if: {{{ 1 | }}} | параметр 1 имеет данные | параметр 1 пуст или опущен}}{{#if: {{{ xx | }}} | параметр xx передан | параметр xx пуст или опущен}}{{#if: {{{ xx | }}} {{{ yy | }}} | xx и / или yy пройдены | оба xx и yy пусты / опущены}}

Использование #ifeq[ править ]

С помощью #ifeqможно сравнить 2 строки или числа (но не числовые выражения : 1 + 1). Функция синтаксического анализатора #ifeqсравнивает два значения и определяет, идентичны ли они.

:{{#ifeq: string 1 | string 2 | value if identical | value if different }}

Если обе строки являются допустимыми числовыми значениями, строки сравниваются как числа, а не как буквальный текст:

{{#ifeq: 01 | 1 | equal | not equal}}равно
{{#ifeq: x01 | x1 | equal | not equal}}не равно
{{#ifeq: 2.000 | 002 | equal | not equal}}равно
{{#ifeq: 2.5 | 2+.5 | equal | not equal}}не равно (использовать #ifexprдля арифметики)
{{#ifeq: {{#expr:10^3}} | 1000 | equal | not equal}}равно

При сравнении учитывается регистр и проверяется соответствие заглавным буквам:

{{#ifeq: King | king | equal | not equal}}не равно
{{#ifeq: {{lc:TopCat}} | topcat |equal|not equal}}равно
{{#ifeq: {{lc:{{{catname}}} }} | topcat |equal|not equal}}

Таким образом, при проверке значения параметра с именем " {{{catname}}}" функция {{lc:___}}может использоваться для мгновенного преобразования в текст в нижнем регистре во время сравнения. Значение {{{catname}}}не будет изменено для дальнейшего использования, вместо этого оно сравнивается только как строчные буквы.

{{#ifeq: {{{n}}} | 1 | singular | plural}}множественное число (для большинства языков, включая английский, {{ Plural |  lang = xx  |  {{{n}}}  |  единственное число  | множественное число  }} в точности эквивалентно).

Использование #ifexpr[ править ]

С помощью #ifexprможно проверить математическую формулу или несколько условий. Функция синтаксического анализатора #ifexprоценивает математическое выражение или логическое выражение и разветвляется в зависимости от логического значения true / false результата (где ноль означает ложь ):

:{{#ifexpr: expression | value if true | value if false }}
Примеры:

{{#ifexpr: ( {{{1}}}+{{{2}}} ) * 2.63 > 45 |above 45 |not above 45}}
{{#ifexpr: {{{1}}} > 0 and {{{1}}} < 1.0 or {{#ifeq:{{{decimal}}}| yes}} |is decimal |not decimal}}

expressionРезультат вычисляется точно таким же образом , как и для функции #expr, причем одни и те же операторы будут доступны. Затем результат оценивается как логическое выражение.

Пустое входное выражение оценивается как ложное:

{{#ifexpr: | yes | no}}нет

Как упоминалось выше, ноль оценивается как ложь, а любое ненулевое значение (например, 6.7) оценивается как истинное.

Неверные данные отобразят сообщение об ошибке. Однако функция #ifexprэквивалентна использованию #ifeqwith #exprinside, но с переворачиванием предложений true / false (then / else):

{{#ifeq: {{#expr: expression }} | 0 | value if false | value if true }}

Недопустимое или неправильное входное выражение вызовет часть с истинным значением (сообщение об ошибке рассматривается как обычная строка; оно не равно нулю, поэтому мы получаем value if false).

{{#ifexpr: = | yes | no }}Ошибка выражения: Неожиданный = оператор
{{#ifeq: {{#expr: = }} |0 | yes | no }}нет

Одно или оба возвращаемых значения могут быть опущены; ничего не выводится, если соответствующая ветка остается пустой:

{{#ifexpr: 1 > 0 | yes }}да
{{#ifexpr: 0 = 0 | yes }}да
{{#ifexpr: 1 > 0 | | no}}

Использование #switch[ править ]

#switchФункция может расшириться в десятки или сотни различных путей в зависимости от значения, выступать в качестве саза , который выбирает между альтернативами. #switchВыражение быстрый способ обрабатывать несколько кодовых значения для параметра, без использования множества #ifфункций; однако производительность снижается при использовании более 100 ветвей, и общие значения должны быть указаны выше среди вариантов, чтобы работать в 3-8 раз быстрее. В редких случаях у a #switchможет быть более двух тысяч ветвей, но требуется время, чтобы просканировать все ветви, даже до сравнения значений.

Функция #switch может иметь однострочную форму:

{{#switch: {{{ x }}} | 1 = один | 2 = два | 3 | 4 | 5 = диапазон 3–5 | другое}}

Этот однострочный #switch будет читать значение {{{x}}} . Для значения 1 он вернет «один». Для значения 2 он вернет «два». Для значений 3, 4 или 5 он вернет «диапазон 3–5». Для любого другого значения или нулевого значения он вернет «другое».

Однако во многих случаях функция #switch представляет собой многострочную форму, где каждая ветвь находится на отдельной строке, как показано ниже:

{{#switch: {{{ x }}} | 1 = один | 2 = два | #default = другое | 3 | 4 | 5 = любое из 3–5 | {{#expr: 2 * 3}} = шесть | {{#expr: 2 * 3 + 1}} = {{lc: SEVEN}} < ! --lowercase ->}}

Это иллюстрирует альтернативный метод указания регистра по умолчанию, который может быть первым, последним или где-то между ними.

Если значение по умолчанию не указано и ни один регистр не соответствует указанному значению, возвращается значение NULL.

Для каждой ветви #switch любая сторона знака равенства «=» может быть простым значением, выражением или вызовом шаблона.

См .: Справка: переключение функции синтаксического анализатора , полное описание и примеры.

Использование #iferror[ править ]

Использование #iferrorможет проверить, вызывает ли значение выражения ошибку, чтобы затем что-то сделать для этого условия, в противном случае отображается значение, которое проверялось.

Эта функция принимает входную строку и возвращает один из двух результатов; функция принимает значение , trueесли входная строка содержит объект HTML с class="error", шаблонными ошибками , такие как петля и рекурсия и другими «failsoft» ошибки синтаксического анализатора:

{{#iferror: test string | value if error | value if correct }} (выбирает значение в зависимости от того, вызывает ли тестовая строка ошибку парсера).

Одна или обе возвращаемые строки могут быть опущены. Если правильная строка опущена, возвращается тестовая строка, если она не ошибочна. Если строка ошибки также опущена, при ошибке возвращается пустая строка:

{{#iferror: {{#expr: 1 + 2 }} | error | correct }}правильно
{{#iferror: {{#expr: 1 + X }} | error | correct }}ошибка
{{#iferror: {{#expr: 1 + 2 }} | error }}3
{{#iferror: {{#expr: 1 + X }} | error }}ошибка
{{#iferror: {{#expr: 1 + 2 }} }}3
{{#iferror: {{#expr: 1 + X }} }}
{{#iferror: {{#expr: . }} | error | correct }}правильно
{{#iferror: <strong class="error">a</strong> | error | correct }}ошибка

С помощью #ifexist[ редактировать ]

Функция #ifexistможет проверить, существует ли еще имя страницы или файл изображения / мультимедиа. Это очень быстро, но ограничено 500 экземплярами на страницу.

{{#ifexist: page title | value if exists | value if doesn't exist }} (выбирает значение в зависимости от того, существует ли заголовок страницы)

Функция оценивает, trueсуществует ли страница, содержит ли она контент, является ли она явно пустой (содержит метаданные, такие как ссылки на категории или волшебные слова , но не видимого содержимого), пуста или является перенаправлением . Оцениваются только страницы, на которые есть красные ссылки false, в том числе если страница существовала, но была удалена.

Использование #expr[ править ]

Использование #exprможет оценивать математическое или логическое выражение, увеличивать сравнение и обрабатывать сообщения об ошибках.

{{#expr: expression }}

Примеры:

{{#expr: ( {{{1}}}+{{{xshift}}} - 6 ) * 18.4}}
{{#expr: ln(7)^3 - abs(-0.344) + floor(5/3) round 3 }}
{{#expr: {{{n}}}>0 and {{{n}}}<1.0 }}

Условные выражения для шаблонов [ править ]

Чтобы отличить параметр шаблона (например, {{1}}}) от определенного и непустого, с одной стороны, или неопределенного или пустого, с другой, используйте #if: с пустым значением по умолчанию:

{{#if: {{{param |}}} | параметр определен и непустой | параметр не определен или пуст}}.

Чтобы различать определенные (и, возможно, пустые) и неопределенные, используйте:

{{#ifeq: {{{param | +}}} | {{{param | -}}} | параметр определен | параметр не определен}}.

См. Также [ править ]

  • Справка: условные таблицы
  • mw: Help: Extension: ParserFunctions , более длинная страница технической помощи на MediaWiki.org
  • Условный (компьютерное программирование)
  • Оператор отношения
  • Справка: Шаблон и Википедия: Тестовая среда и тестовые примеры шаблонов
  • m: Справка: Расширенные шаблоны
  • Категория: Шаблоны If-then-else
  • {{ Ifequal }}