Эта страница справки представляет собой практическое руководство . В нем подробно описаны процессы или процедуры некоторых аспектов норм и практики Википедии. Это не одна из политик или рекомендаций Википедии , и может отражать различные уровни консенсуса и проверки . |
На этой странице « Справка: условные выражения» описаны способы отображения различных результатов в зависимости от условий проверки на странице или в шаблоне . Эти функции синтаксического анализа , используемые для оценки условных выражений включают имена функций: #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
эквивалентна использованию #ifeq
with #expr
inside, но с переворачиванием предложений 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}}
→
Кончик Чтобы проверить сравнения на основе дат (если текущая дата и время позже других даты и времени), сначала преобразуйте время в количество секунд после 1 января 1970 года с помощью функции {{#time: U}} , а затем просто сложите и вычтите даты. |
Использование #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 }}