도와 주세요.:조건식

Help

이 페이지에서는 다양한 파서 기능을 사용하여 페이지 또는 템플릿에서 탐지된 조건에 따라 다른 결과를 표시하는 방법을 설명합니다.

다음은 입력을 처리하는 방법과 관련하여 이러한 기능에 대한 간단한 요약입니다(기능 이름은 이 페이지의 아래에 나와 있는 기능에 대한 자세한 설명에 링크되어 있습니다).

  • #if문자열의 참 값을 확인합니다.
  • #ifeq두 문자열 또는 숫자가 동일한지 확인합니다.
  • #switch문자열을 가능한 값 집합과 비교합니다.
  • #expr수학식을 평가합니다.
  • #ifexpr수학적 표현을 평가하고 결과의 진실 값에 작용합니다.
  • #iferror문자열(종종 내부 표현식) 여부를 확인합니다.#expr) 파서 오류를 트리거합니다.
  • #ifexist지정된 제목의 페이지가 Wiki(이미지/미디어 파일 포함)에 있는지 확인합니다.

표에서 이러한 기능을 사용하려면 도움말을 참조하십시오.조건부 테이블.

요약

각 함수의 기본 구문(및 사용)은 다음과 같습니다.

  • {{#if: test string value if true value if false }}
    (테스트 문자열이 참인지 거짓인지를 기준으로 두 값 중 하나 선택)
  • {{#ifeq: string 1 string 2 value if equal value if unequal }}
    (두 문자열이 동일한지 여부에 따라 두 값 중 하나를 계산합니다. 가능할 때마다 수치 비교가 수행됩니다.)
  • {{#switch: test string case1 = value for case 1 ... default }}
    (테스트 문자열의 값을 기반으로 여러 대안 간의 차이—연속적으로 다음과 같습니다.#ifeq테스트, 그러나 훨씬 더 효율적)
  • {{#expr: expression }}
    (지정된 식을 평가합니다. 도움말:계산(상세부사항
  • {{#ifexpr: expression value if true value if false }}
    (평가된 식의 참 값을 기준으로 두 값 중 하나 계산)
  • {{#iferror: test string value if error value if no error }}
    (테스트 문자열에서 파서 오류가 발생하는지 여부에 따라 두 값 중 하나를 선택합니다.)
  • {{#ifexist: page title value if exists value if doesn't exist }}
    (지정된 제목을 가진 페이지의 존재에 따라 두 개의 값 중 하나 선택)

"truth"는 문자열 기반으로 매우 다르게 해석됩니다.#if함수와 수치 지향 함수#expr그리고.#ifexpr문자열에 공백이 아닌 문자가 하나 이상 포함되어 있으면 참으로 간주됩니다(예:#if함수는 문자열 "0" 및 "FALSE"를 거짓이 아닌 참 값으로 해석합니다.공백만 포함하거나 문자가 전혀 없는 문자열은 false로 처리됩니다(따라서).#if정의되지 않은 매개 변수("" 및 "")를 잘못된 값으로 해석합니다.반면에, 평가된 표현들에서.#expr그리고.#ifexpr다음과 같은 부울 연산자and,or,그리고.not숫자 값 0을 거짓으로 해석하고 다른 숫자를 참으로 해석합니다.출력 측면에서 부울 연산은 참 값에 대해 1을 반환하고 거짓에 대해 0을 반환합니다(숫자 연산자에 의해 일반 숫자로 처리됨).숫자가 아닌 문자열(대부분의 빈 문자열 및 정의되지 않은 매개 변수 사용 포함)이 원인이 됩니다.#expr그리고.#ifexpr오류를 보고합니다.

또한 파서 함수 호출의 각 부분에 있는 선행 및 후행 공백은 모두 제거되므로, 가독성을 높이기 위해 호출을 추가 공백으로 포맷할 수 있습니다.예:

{{#if: {{xx}}}: 매개 변수 xx 값은 true 매개 변수 xx 값은 false }}

여기서 "매개 변수 xx 값이 참입니다" 및 "매개 변수 xx 값이 참입니다" 문자열의 공백만 유의합니다.다른 모든 공백은 무시됩니다.따라서 위의 구조는 다음 호출과 같습니다.

{{#if:{{xx}}}: 매개 변수 xx 값은 true 매개 변수 xx 값은 false}}

문자열이 필요한 파서 함수 호출의 모든 부분에서 리터럴 문자열, 템플릿 호출, 파서 함수 호출 또는 기타 마법 단어를 사용할 수 있습니다.

사용#if

참고 항목:{{if}}템플릿

#iffunction은 테스트 문자열의 참 값을 기준으로 두 가지 대안 중 하나를 선택합니다.

{{#if: test string value if true value if false }}

위에서 설명한 대로 문자열에 공백이 아닌 문자가 하나 이상 포함되어 있으면 참으로 간주됩니다.공백만 포함하거나 문자가 전혀 없는 문자열은 false로 처리됩니다.

정의되지 않은 매개 변수 값은 까다롭습니다. 템플릿 호출에 첫 번째 위치 매개 변수가 정의되지 않은 경우{{{1}}}는 리터럴 문자열 "{{1}}}"(즉, 숫자 1 주위에 3개의 곱슬곱슬한 중괄호 집합이 포함된 7자 문자열)로 평가되며, 이는 값입니다.(이 문제는 명명된 매개 변수와 위치 매개 변수 모두에 대해 발생합니다.) 그러나{{{1 }}}수직 막대 또는 파이프 문자 때문에 빈 문자열(거짓 값)로 평가됩니다." "매개 변수 이름 바로 뒤에 기본값(파이프와 첫 번째 닫는 곱슬곱슬한 대괄호 사이에 아무것도 없기 때문에 빈 문자열)을 매개 변수가 정의되지 않은 경우 사용할 "폴백" 값으로 지정합니다.

이 함수를 사용하여 매개 변수가 참 값을 가진 템플릿으로 전달되었는지 확인할 수 있습니다.

예:

{{#if:{{1}}} 첫 번째 위치 매개 변수의 참 값 첫 번째 위치 매개 변수의 값이 거짓(또는 값 없음) }{#if:{{xx}} 이름이 지정된 매개 변수 xx의 참 값이 거짓(또는 값 없음) }{{#if:{{xxx}}}}{y}} xx 또는 yy가 참 값을 가집니다.또는 둘 다 참입니다. xx와 yy 모두 잘못된 값(또는 값 없음) }을(를) 가집니다.

두 모수가 모두 참인지 여부를 검정하려면 조금 더 많은 노력이 필요합니다.예:

{{#if: {{xx}}}{#if: {{yy}} xx와 yy 모두 참 값 xx는 참이지만 noty}} xx와 yy는 모두 거짓 }}

내포에 유의#if이와 같은 기능은 매우 빠르게 리소스 집약적이 됩니다.일부 Wiki에서는 중첩 수준이 7개라도 리소스 제한을 초과할 수 있습니다.

의 설명을 참조하십시오.#ifeq매개 변수의 값이 참인지 거짓인지 여부에 관계없이 매개 변수가 정의되었는지 여부를 탐지하는 방법입니다.

사용#ifeq

참고 항목:{{ifeq}}템플릿

#ifeqfunction은 두 테스트 문자열이 서로 동일한지 여부를 기준으로 두 가지 대안 중 하나를 선택합니다.

{{#ifeq: string 1 string 2 value if equal value if not equal }}

두 문자열이 모두 유효한 숫자 값이면 리터럴 문자열이 아닌 숫자로 비교됩니다.

{{#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 }}같지 않음(산술!)
{{#ifeq: 2*10^3 2000 equal not equal }}같지 않음(산술!)
{{#ifeq: 2E3 2000 equal not equal }}대등한

네 번째와 다섯 번째 예제에서 보듯이 수학적 표현은 평가되지 않습니다.그것들은 일반적인 현으로 취급됩니다. 하지만.#expr이러한 식을 평가하는 데 사용할 수 있습니다.

{{#ifeq: {{#expr:2*10^3}} 2000 equal not equal }}대등한

문자열 비교는 대소문자를 구분합니다.

{{#ifeq: King king equal not equal }}비등한

대/소문자를 구분하지 않는 검사의 경우 또는 함수를 사용하여 문자열을 모든 소문자 또는 대문자로 강제 적용합니다.이는 매개 변수 값을 처리할 때 가장 유용합니다.

{{#ifeq: {{lc:King}} king equal not equal }}대등한
{{#ifeq: {{lc: {{{position}}} }} top code if true code if false }}

두 번째 예에서는 "위", "위" 및 "위" 값이 모두 일치합니다.

이 파서 함수를 사용하여 템플릿 매개 변수가 잘못된 값으로 설정된 경우에도 템플릿 매개 변수가 정의되었는지 여부를 탐지할 수 있습니다.예를 들어, 첫 번째 위치 매개변수가 템플릿으로 전달되었는지 확인합니다(문자열은 "+그리고 "-두 개의 서로 다른 비공간 문자열일 수 있음):

{{#ifeq: {{{1 +}}} {{{1 -}}} 1 is defined 1 is undefined }}

구체적으로 말하면, 다음과 같은 방법으로 호출될 때 이 코드가 생성하는 것은 다음과 같습니다.

{{template-name}}1이(가) 정의되지 않았습니다.
{{template-name }}1이 정의됩니다.
{{template-name 1=}}1이 정의됩니다.
{{template-name 1=foo}}1이 정의됩니다.

mw:도움말 참조:확장:ParserFunctions##ifeq는 이 함수가 구현되는 방식으로 인해 발생할 수 있는 반직관적 결과를 포함하여 자세한 내용을 확인할 수 있습니다.

사용#switch

#switchfunction은 입력 문자열을 기준으로 여러 대안 중에서 선택합니다.

{{#switch: test string case1 = value for case 1 ... default value }}

일부 프로그래밍 언어에서 볼 수 있는 스위치 문과 동일하게, 이것은 많은 것을 연결하지 않고도 여러 사례를 처리할 수 있는 편리한 방법입니다.#if함께 작동합니다.그러나 100개 이상의 대안이 있을 경우 성능이 저하됩니다.사례 목록의 앞에 공통 값을 두면 함수가 훨씬 더 빨리 실행될 수 있습니다.

각각의 경우, 등호의 어느 한쪽은 "=간단한 문자열, 파서 함수에 대한 호출(다음을 포함)이 될 수 있습니다.#expr표현식을 평가하기 위해) 또는 템플릿 호출.값과 연결되지 않은 경우(예: 등호가 사용되지 않음) 다음으로 지정된 값이 사용됩니다.이를 통해 여러 사례에서 동일한 값을 반복적으로 지정할 필요 없이 동일한 값을 공유할 수 있습니다(아래 예 참조).

일치하는 사례가 없으면 기본값이 사용됩니다.이것은 위의 구문 요약에서 볼 수 있듯이 일반적으로 연관된 "대소문자" 값이 없는 마지막으로 지정되지만, 구성이 다음과 같은 경우 테스트 문자열 이후의 어느 시점에서도 지정될 수 있습니다. #default = value사용됩니다(아래 두 번째 예 참조).기본값을 지정하지 않은 경우 입력 문자열과 일치하는 대소문자가 없을 때 null 문자열이 반환됩니다.

이 기능은 특히 여러 줄 형식으로 설정할 수 있습니다.

{{#스위치: {{x}}} 1 = 1 2 = 2 3 = 3 4 = 4 5 6 7 = 5 ~ 7 기타 }

여기서 템플릿 매개 변수의 값은x는 문자열 "1"이고, 출력은 문자열 "1"이고, "2"인 경우 "2"이고, 나머지는 "2"입니다.그러나 "5", "6" 또는 "7" 값 중 하나에 대해서는 출력이 "5 ~ 7 범위의" 문자열이 됩니다.다른 값 또는 null 값의 경우 "other" 문자열을 반환합니다.

다음 예제는 이전 예제와 동일합니다.

{{x}} 스위치: {{x}} #기본값 = 기타 1 = 1 2 = 2 3 = 3 4 = 4 5 6 7 = 5 ~ 7 }}

도움말 참조:전체 설명 및 기타 예제를 위한 스위치 파서 기능.

사용#expr

#expr함수는 수학식(부울식 포함)을 평가합니다.그 자체가 조건부 함수는 아니지만 종종 이러한 함수 내부에서 사용되므로 여기에서 간략하게 설명합니다.보기:도움말:자세한 내용을 계산합니다.

{{#expr: expression }}

과는 달리#if함수, 의 모든 값expression에 의해 평가된.#expr수치로 가정합니다.임의 문자열에서는 작동하지 않습니다.부울 연산의 목적(예:and,or,그리고.not), false는 0으로 표시되고 true는 1로 표시됩니다. 이러한 값은 숫자 연산자에 의해 정규 숫자로 처리됩니다.부울 연산자는 입력으로 0을 거짓으로 처리하고 다른 모든 숫자는 참으로 처리합니다.숫자가 아닌 문자열을 사용하면 오류가 발생합니다.

예:

{{#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 }}

이러한 예에서는 참조된 모든 매개 변수가 정의되고 숫자 값을 갖는 것으로 가정합니다.그렇지 않을 경우 오류가 발생합니다. 참조#iferror오류를 처리하는 한 가지 방법으로.

사용#ifexpr

#ifexpr함수는 정확히 같은 방식으로 식을 평가합니다.#expr를 수행하지만(자세한 내용은 해당 함수에 대한 설명 참조) 결과의 참 값에 따라 가능한 두 개의 값 중 하나를 반환합니다.

{{#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 }}

위에서 설명한 바와 같이, 이 함수의 목적상 0은 거짓이고 다른 수치는 참입니다.

{{#ifexpr: 0 yes no }}아니
{{#ifexpr: 1 yes no }}
{{#ifexpr: 2 yes no }}

빈 입력 식은 false로 평가됩니다.

{{#ifexpr: yes no }}아니

그러나 숫자가 아닌 문자열이 포함된 입력을 포함하여 잘못된 입력은 오류 메시지를 표시합니다.

{{#ifexpr: = yes no }} 오류: 예기치 않은 = 연산자
{{#ifexpr: A=B yes no }} 오류: 인식할 수 없는 단어 "a"입니다.

정상적인 상황에서, 함수는#ifexpr다음 구성을 사용하는 것과 같습니다.#ifeq그리고.#expr(입력 결과를 "0"과 비교하기 때문에 "참" 및 "거짓" 출력 값이 반대로 표시됩니다.

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

그러나 에 의해 생성된 모든 오류 메시지#expr에 의해 보일 것입니다.#ifeq"0"과 동일하지 않은 일반 문자열로서, 따라서.value if true출력됩니다.

{{#ifeq: {{#expr: = }} 0 yes no }}아니

출력 값 중 하나 또는 둘 다 생략되거나 비워 둘 수 있으며, 이 경우(생성물의 "누락" 분기에 도달한 것으로 가정) 출력 결과가 나타나지 않습니다.

{{#ifexpr: 1 > 0 yes }}
{{#ifexpr: 1 > 0 no }}

mw:도움말 참조:확장:ParserFunctions##ifpr은 이 기능이 구현되는 방식으로 인해 발생할 수 있는 반직관적 결과를 포함하여 보다 자세한 내용을 제공합니다.

사용#iferror

#iferrorfunction은 입력이 오류를 트리거하는지 여부에 따라 두 가지 옵션 중 하나를 선택합니다.

{{#iferror: test string value if error value if correct }}

테스트 문자열은 일반적으로 다음에 대한 호출입니다.#expr또는 다른 파서 함수이지만 일반 텍스트 또는 템플릿 호출일 수 있습니다. 이 경우 오류는 HTML 개체에 의해 트리거됩니다.class="error"또는 루프 및 재귀와 같은 다양한 템플릿 오류 또는 기타 "failsoft" 파서 오류입니다.

반환 값 중 하나 또는 둘 다 생략할 수 있습니다.만약에value if correct생략하면 테스트 문자열이 잘못되지 않은 경우 반환됩니다.만약에value if error또한 생략되며, 오류 시 빈 문자열이 반환됩니다.

{{#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

#ifexistfunction은 지정된 제목에 페이지가 존재하는지 여부에 따라 두 가지 옵션 중 하나를 선택합니다.

{{#ifexist: page title value if page exists value if page doesn't exist }}

페이지는 모든 네임스페이스에 있을 수 있으므로, 문서 또는 "내용 페이지", 이미지 또는 기타 미디어 파일, 카테고리 등이 될 수 있습니다.페이지의 실제 내용은 관련이 없으므로 비어 있거나 리디렉션될 수 있습니다.빨간색 링크를 생성하는 제목이 존재하지 않습니다(빨간색 링크와 마찬가지로 존재하지 않는 페이지가 있는지 확인하면 제목이 특수:원하는 페이지).

이 검사는 매우 빠르지만 "비싼 파서 기능"으로 간주되기 때문에 페이지당 500개의 인스턴스로 제한되었습니다.그러나 동일한 페이지에서 동일한 제목의 여러 검사는 여러 인스턴스로 계산되지 않습니다. 첫 번째 검사 결과가 캐시되어 이후 검사에 재사용되기 때문입니다.


템플릿 매개 변수 확인 중

템플릿 코딩에서 흔히 볼 수 있는 관용구는 다음 예에서 볼 수 있듯이 "폴백 값의 체인"입니다.

{{{1 {{{url {{{URL }}}}}}}}}

여기서 첫 번째 위치 매개변수가 정의되면 해당 값이 사용됩니다.정의되지 않은 경우 다음과 같이 명명된 매개 변수url선택되고 정의된 경우 해당 값이 사용됩니다.첫 번째 위치 매개변수와url정의되지 않은 다음 이름이 지정된 매개 변수URL이 선택되어 있습니다. 정의된 경우 해당 값이 사용되고, 정의되지 않은 경우 빈 문자열이 사용됩니다.

문제는 이 구조가 다음과 같은 것으로 해석되는 경향이 있다는 것입니다.

{{#if: {{{1 }}} {{{1}}} {{#if: {{{url }}} {{{url}}} {{#if: {{{URL }}} {{{URL}}} }} }} }}

하지만 그렇지 않습니다.차이점은 기본값을 사용하는 첫 번째 구성은 매개변수의 정의에 따라 달라지는 반면, 두 번째 구성은#if함수는 매개 변수의 참 값에 따라 달라집니다.이것들은 매우 다른 두 가지입니다.

(첫 번째 구성에서) 폴백 값 체인의 매개 변수 중 하나가 템플릿 호출에서 빈 값(또는 공백만)으로 설정된 경우, 체인의 다음 매개 변수로 "폴백"하는 대신 해당 빈 값이 사용됩니다.예를 들어 템플릿이 다음 두 가지 방법 중 하나로 호출되는 경우:

{{template-name url=https://example.com/}}
{{template-name url=https://example.com/ }}

첫 번째 위치 매개 변수가 정의되었습니다. 매개 변수의 값은 빈 문자열입니다.따라서, 의 가치는url관련이 없습니다.템플릿은 해당 값에 도달하지 않습니다.

마찬가지로 템플릿이 다음과 같이 호출되는 경우:

{{template-name url= URL=https://example.com/}}

의 빈 값url의 값 대신 사용됩니다.URL.

이러한 예제는 "잘못된 방법"으로 호출되는 템플릿에 의존하기 때문에 약간 조작된 것처럼 보일 수 있습니다.그러나 이러한 문제가 완전히 합리적인 템플릿 호출을 통해 발생하는 경우(특히 템플릿 하나가 다른 템플릿을 호출하여 해당 매개 변수의 값을 "하위 수준" 템플릿의 매개 변수로 전달하는 "계층" 템플릿이 있는 경우)를 처리하는 것은 매우 쉽습니다.종종 정의되었지만 비어 있는 매개 변수 값으로 끝나게 됩니다.

이와 같은 문제 때문에 템플릿 코더는 정의된 상태와 비어 있지 않은 상태, 정의된 상태 및 비어 있지 않은 상태의 서로 다른 조합을 구별해야 하는 경우가 있습니다.이 작업은 다음과 같은 방법으로 수행할 수 있습니다(여기서는 첫 번째 위치 매개 변수가 사용되지만 명명된 매개 변수도 동일한 방식으로 작동합니다).

정의 및 비공백 대 정의되지 않은 또는 정의되지 않은 빈칸
{{#if: {{{1 }}} 1 is defined and contains non-whitespace 1 is undefined, empty, or contains only whitespace }}
정의됨(공백 또는 공백 여부에 관계없이)과 정의되지 않음
다음은 동등한 대안입니다.
  • {{#ifeq: {{{1 +}}} {{{1 -}}} 1 is defined (and possibly empty or only-whitespace) 1 is undefined }}
  • {{#ifeq: {{{1 /}}}{{{1 }}} / 1 is undefined 1 is defined (and possibly empty or only-whitespace) }}
  • {{#if: {{#if: {{{1 /}}} {{{1 }}} / }} 1 is defined (and possibly empty or only-whitespace) 1 is undefined }}

참고:+그리고.-문자는 서로 다른 두 개의 공백 문자일 수 있습니다.또한 매개 변수가 정의된 경우 매개 변수 값을 사용하고 정의되지 않은 경우 다른 값을 사용하려면 더 간단한 "폴백" 구성을 사용할 수 있습니다.

{{{1 some other value}}}
정의 및 비공백 대 정의 및 비공백 대 정의되지 않음
다음은 동등한 대안입니다.
  • {{#ifeq: {{{1 +}}} {{{1 -}}} 1 is defined {{#if: {{{1 }}} and non-blank and blank }} 1 undefined }}
  • {{#if: {{{1 /}}} {{#if:{{{1 }}} 1 is defined and non-blank 1 is undefined }} 1 is defined and blank }}

정의되지 않은 경우를 신경쓰지 않으면 "를 제거할 수 있습니다. 1 undefined두 가지 예에서

가변 템플릿

Wikitext 구문에서는 기본적으로 진정한 변수 템플릿을 생성할 수 없으며, 일정량까지 들어오는 매개 변수를 하나씩 검사하는 유사 변수 템플릿만 생성할 수 있습니다.그러나 전용 모듈을 사용하여 이 제한을 깰 수 있습니다.간단한 경우 {{#invoke:separated entries main}}을(를) 사용하면 모든 순차적 매개 변수를 맹목적으로 확장할 수 있으며 사용자 지정 구분 기호를 설정할 수 있습니다.더 복잡한 경우 {{#invoke:params}}을(를) 사용하면 수신되는 모든 매개 변수를 미리 알지 못한 채 카운트, 목록, 매핑, 필터링 및 전파할 수 있습니다.

참고 항목