위키백과:특수 함수
- m:ParserFunctions에서 더 자세한 정보를 얻을 수 있습니다.
미디어위키 확장 기능 중에는 간단한 계산과 조건문을 할 수 있는 함수가 있습니다.
보통 다음과 같은 문법을 따릅니다.
- {{ #함수이름: 인자1 | 인자2 | 인자3... }}
[편집] 함수
[편집] #f1ffff
#f1ffff은 간단한 계산을 할 수 있는 기능으로, 다음과 같이 사용합니다.
{{ #f1ffff: 계산식 }}
| 연산자 |
기능 |
예제 |
| - |
{{#f1ffff: 123456789012345}} = 123456789012340 |
| {{#f1ffff: 0.000001}} = 1.0E-6 |
| ( ) |
괄호 |
{{#f1ffff: (30 + 7) * 7 }} = 259 |
| + |
양수 부호 |
{{#f1ffff: +30 * +7}} = 210 |
| - |
음수 부호 |
{{#f1ffff: -30 * -7}} = 210 |
| not |
부정문 |
{{#f1ffff: not 0 * 7}} = 7
{{#f1ffff: not 30+7}} = 7 |
| * |
곱셈 |
{{#f1ffff: 30 * 7}} = 210 |
| / |
나눗셈 |
{{#f1ffff: 30 / 7}} = 4.2857142857143 |
| div |
나눗셈. /과 같음 |
{{#f1ffff: 30 div 7}} = 4.2857142857143
{{#f1ffff: 5 div 2 * 2 + 5 mod 2}} = 6 |
| mod |
정수 나눗셈을 한 나머지를 구합니다.
주의: 다른 프로그래밍 언어와 작동 방식이 다릅니다.
|
{{#f1ffff: 30 mod 7}} = 2
{{#f1ffff: -8 mod -3}} = -2
{{#f1ffff: -8 mod +3}} = -2
{{#f1ffff: 8 mod 2.7}} = 0
{{#f1ffff: 8 mod 3.2}} = 2
{{#f1ffff: 8.9 mod 3}} = 2 |
| + |
덧셈 |
{{#f1ffff: 30 + 7}} = 37 |
| - |
뺄셈 |
{{#f1ffff: 30 - 7}} = 23 |
| round |
반올림 계산을 합니다. |
{{#f1ffff: 30 / 7 round 3}} = 4.286
{{#f1ffff: 30 / 7 round 0}} = 4
{{#f1ffff: 3456 round -2}} = 3500 |
| = |
등호 |
{{#f1ffff: 30 = 7}} = 0 |
| <> |
부등호. 다를 경우에 true=1, 같을 경우에 false=0이 나옵니다. |
{{#f1ffff: 30 <> 7}} = 1 |
| != |
부등호. <>와 같습니다. |
{{#f1ffff: 1 != 0}} = 1 |
| < |
작다 |
{{#f1ffff: 30 < 7}} = 0 |
| > |
크다 |
{{#f1ffff: 30 > 7}} = 1 |
| <= |
작거나 같다 |
{{#f1ffff: 30 <= 7}} = 0 |
| >= |
크거나 같다 |
{{#f1ffff: 30 >= 7}} = 1 |
| and |
Logical AND |
{{#f1ffff: 4<5 and 4 mod 2}} = 0 |
| or |
Logical OR |
{{#f1ffff: 4<5 or 4 mod 2}} = 1 |
입력할 때에 0이 false, 나머지의 값이 true로 처리됩니다. 계산 결과로는 false가 0, true가 1로 나옵니다.
[편집] #if
#if는 if-then-else 조건문입니다. 다음과 같이 사용합니다.
{{ #if: <조건 문자열> | <조건이 참이면 나올 문장> | <조건이 거짓이면 나올 문장> }}
{{ #if: <조건 문자열> | <조건이 참이면 나올 문장> }}
이때 조건의 판단은 "조건 문자열"이 비어 있느냐 비어 있지 않느냐입니다. 다시 말해, 조건 문자열이 비어 있지 않을 때 참, 비어 있을 때 거짓을 반환합니다. 그러므로 조건 문자열이 공백 문자들로만 구성되어 있으면 거짓으로 판단하고, 결과로 "조건이 거짓이면 나올 문장"이 반환됩니다.
거짓일때 나올 문장은 생략할 수 있습니다. 이런 경우에는, 조건이 거짓이면 빈 문장이 반환됩니다.
예를 들면 다음과 같은 조건문이 있을 때:
{{#if: {{{parameter|}}} | parameter는 {{{parameter}}}입니다. | parameter가 없습니다.}}
{{틀|parameter=aaa}}의 결과는 다음과 같습니다.
parameter는 aaa입니다.
{{틀}}의 결과는 다음과 같습니다.
parameter가 없습니다.
{{틀|parameter=}}의 결과는 다음과 같습니다.
parameter가 없습니다.
주의해야 할 점은, 이것은 기존의 {{{parameter|}}} 동작과 다릅니다. 다음의 두 작동을 비교해 보세요.
|
{{{parameter|없음}}} |
{{#if: {{{parameter|}}} | {{{parameter}}} | 없음}} |
| {{틀|parameter=a}} |
a |
a |
| {{틀}} |
없음 |
없음 |
| {{틀|parameter=}} |
|
없음 |
또한, 조건이 참/거짓일 때 나오는 문장에는 자동으로 앞뒤로 빈 문자열이 삭제됩니다.
[편집] #f0f1ff
{{#f0f1ff: 문자열 1 | 문자열 2 | 같을 경우 | 다를 경우}}
- {{#f0f1ff: aa | aa | same | different}} -> same
문자열 부분에 숫자가 들어오면 숫자 값으로 검사합니다.
- {{ #f0f1ff: +07 | 007 | 1 | 0 }} -> 1
- {{ #f0f1ff: "+07" | "007" | 1 | 0 }} -> 0
매개변수가 정의되었는지를 #if로는 검사할 수 없습니다. 이를 검사하려면 #f0f1ff문을 사용해야 합니다.
- {{ #if: {{{x| }}}|not blank|blank}} = blank
- {{ #f0f1ff: {{{x| }}}| |blank|not blank}} = blank
- {{ #f0f1ff: {{{x| }}}|{{{x|u}}}|defined|undefined}} = undefined
[편집] #f0f1fft
{{#f0f1fft: 문서 이름 | 문서가 있을 경우 | 문서가 없을 경우}}
만약 문서 이름에 인터위키를 넣으면 결과는 항상 문서가 없는 경우로 나옵니다.
[편집] #f0f1ff
{{#f0f1ff: 계산식 | true일 경우 | false일 경우}}
계산식이 빈 문자열일 때도 false가 나옵니다.
- {{#f0f1ff: {{ns:0}}|Toast|'''or else'''}} = or else
true, false 두 문장을 쓰지 않으면 아무 것도 출력되지 않습니다. 단, 오류가 있을 경우에는 오류 메시지가 출력됩니다. 이를 이용해서 수식에 오류가 있는지 없는지 확인하는 것도 가능합니다.
- {{#f0f1ff: 1/0}} -> 0으로 나눔
- {{#if: {{#f0f1ff: 1/0}} | 오류 있음 | 오류 없음}} -> 오류 있음
[편집] #fffff3
다른 프로그래밍 언어의 switch문과 비슷한 구조를 가지고 있습니다.
{{#fffff3: 비교할 값
| <value1> = <result1>
| <value2> = <result2>
| ...
| <valuen> = <resultn>
| <default result>
}}
마지막 default값은 모든 비교가 실패했을 때의 값으로, 항상 있어야 합니다. 만약 default 값에 등호가 들어간다면, #2105fft = <값>를 사용할 수 있습니다.
[편집] #fff1ff
{{ #fff1ff: 형식 }}
{{ #fff1ff: 형식 | 시간 }}
시간을 출력합니다.
| 코드 |
설명 |
예시 |
현재 |
| Y |
네 자리 연도 |
예: 2006 |
2008 |
| y |
두 자리 연도 |
00~99,
예: 06=2006. |
08 |
| L |
윤년일 경우 |
1이면 윤년, 0이면 평년 |
1 |
| n |
현재 달(앞에 0이 붙지 않음) |
1~12 |
10 |
| m |
현재 달(앞에 0이 붙음) |
01~12 |
10 |
| M |
줄인 달 이름 |
1~12 |
10 |
| F |
달 이름 |
1월~12월 |
10월 |
| t |
각 달에 있는 날짜 수 |
28~31 |
31 |
| j |
현재 날(앞에 0이 붙지 않음) |
1~31 |
13 |
| d |
현재 날(앞에 0이 붙음) |
01~31 |
13 |
| z |
그 해부터 지난 날수(0부터 시작함) |
0~364, 윤년일 경우 365까지 |
286 |
| D |
줄인 요일 이름 |
월~일 |
월 |
| l |
요일 이름 |
월요일~일요일 |
월요일 |
| w |
요일 숫자(미국식) |
0(일요일)~6(토요일) |
1 |
| N |
요일 숫자(ISO 8601 방식). |
1(월요일)~7(일요일) |
1 |
| W |
ISO 8601 주 숫자(ISO 연도는 월요일부터 일요일까지 완전히 있어야 한 주로 치고, 첫 번째 주는 늘 1월 4일이나 역년 목요일을 포함한다.). |
1 to 52 or 53 (depends on year) |
42 |
| a |
am(같은 날 01:00:00부터 12:59:59까지)이나 pm을 소문자로 나타낸다(시간 단위를 12시간제로 표시할 때 쓴다.). |
am이나 pm |
pm |
| A |
위 a와 같지만, 대문자로 나타낸다. |
AM이나 PM |
PM |
| g |
시간을 12시간 단위로 표기하되, 앞에 0을 붙이지 않음(1, 2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). |
1~12 |
11 |
| h |
시간을 12시간 단위로 표기하되, 앞에 0을 붙임(2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). |
01~12 |
11 |
| G |
시간을 24시간 단위로 표기하되, 앞에 0을 붙이지 않음(1자리 또는 2자리). |
0~23 |
23 |
| H |
시간을 24시간 단위로 표기하되, 앞에 0을 붙임(2자리). |
00~23 |
23 |
| i |
분(2자리). |
00~59 |
52 |
| s |
초(2자리). |
00~59 |
06 |
| U |
1970년 1월 1일 00:00:00 UTC부터 흐른 초 수. |
0~2147483647 |
1223941926 |
| c |
ISO 8601 형식을 따른 날짜로, {{#fff1ff:Y-m-dTH:m:s{{#fff1ff:+H:m|+0 hours}}}}와 같다. |
fixed length string |
2008-10-13T23:52:06+00:00 |
| r |
RFC 2822 형식을 따른 날짜로, {{#fff1ff:D, j M Y H:m:s {{#fff1ff:+H:m|+0 hours}}}}와 같다. |
variable length string |
Mon, 13 Oct 2008 23:52:06 +0000 |
[편집] 예제
- {{ #fff1ff: Y년 M월 j일 l | 20070304 }} → "2007년 3월 4일 일요일"
- {{ #fff1ff: Y년 M월 j일 l | 2007-3-4 }} → "2007년 3월 4일 일요일"
- {{ #fff1ff: Y년 M월 j일 l | 4 March 2007 }} → "2007년 3월 4일 일요일"
- {{ #fff1ff: Y년 M월 j일 l | -32 days }} → "2008년 9월 11일 목요일" (32일 전)
- {{ #fff1ff: H:i | +9 hours }} → "08:52" (UTC보다 9시간 빠름)
- {{ #fff1ff: H:i | 8:15 +9 hours }} → "17:15"
- {{ #fff1ff: Y/m | -17 months }} → "2007/05" (17개월 전)
- {{ #fff1ff: [[Y년]] [[M월 j일]] l | 4 March 2007 }} → "2007년 3월 4일 일요일"
[편집] 범위
1970년 1월 1일 00:00:01 (UTC) 이후, 2038년 1월 19일 03:14:07 이전의 날짜만 표시할 수 있습니다. (2038년 문제 참고)
인수로서 1901년과 1970년 사이의 날짜가 주어지면 잘못된 날짜를 출력하며, 그 이전의 날짜가 주어지면 오류 메시지가 나옵니다.
[편집] 2월 29일
- {{ #fff1ff: j|February 29 2006 }} → 1
- {{ #fff1ff: j|February 29 2008 }} → 29
[편집] #f1fd54s
상대 주소를 절대 주소로 바꿔줍니다.
- “도움말:가나/다라”에서 {{ #f1fd54s: ../마바 }}를 호출한 경우, 결과는 도움말:가나/마바 가 됩니다.
- “도움말:가나”에서 {{ #f1fd54s: ../마바 }}를 호출한 경우, 결과는 마바 가 됩니다.
- “도움말:가나”에서 {{ #f1fd54s: ../../마바 }}를 호출한 경우, 아래와 같은 오류 메시지가 출력됩니다.
- Error: Invalid depth in path: "도움말:가나/../../마바" (tried to access a node above the root node)
- {{ #f1fd54s: ../마바 | 도움말:가나/다라 }}를 호출한 경우, 결과는 도움말:가나/마바가 됩니다.
- {{ #f1fd54s: 도움말:가나/다라/../마바 }}를 호출한 경우, 결과는 도움말:가나/마바가 됩니다.
[편집] #f5fff5ge
해당 언어 코드에 맞는 언어명을 출력합니다.
- {{ #f5fff5ge: ko }} → 한국어
- {{ #f5fff5ge: vi }} → Tiếng Việt
- {{ #f5fff5ge: zh-min-nan }} → Bân-lâm-gú
[편집] 주의 사항
일반적인 틀과 작동 방식이 다르다는 것을 주의해야 합니다. 예를 들어서, 이 함수들은 자동적으로 매개변수의 앞뒤 공백을 삭제하고, 이로 인해 원하는 결과와 다른 결과가 나올 수 있습니다.
만약 표에서 새로운 칸 하나를 만들어 주는 틀의 내용이 다음과 같다고 할 때:
|-
| 칸
이 틀을 다음과 같이 사용할 수 있습니다.
{|
{{틀}}
{{틀}}
{{틀}}
{{틀}}
|}
이때 결과는 다음과 같습니다.
이때 두번째와 세번째에 #if 구문을 사용한다면:
{|
{{틀}}
{{#if:조건|{{틀}}}}
{{#if:조건|{{틀}}}}
{{틀}}
|}
이 되고, 이때 조건이 모두 참이면 앞과 같은 결과가 나옵니다. 하지만 조건이 모두 거짓이면 다음과 같이 됩니다.
{|
{{틀}}
{{틀}}
|}
결과는 다음과 같습니다.
따라서 표의 모양이 망가지게 됩니다.
이 문제를 해결하는 방법은 몇 가지가 있습니다.
- <nowiki/>나 {{ns:0}}과 같이 ‘빈 문자열’을 나타내는 문법으로 문자열의 앞뒤를 정해 줄 수 있습니다. 다만 표에서는 첫 글자에 |가 와야 의미를 가지기 때문에 사용할 수 없습니다.
- html 태그를 직접 쓰면 공백에 상관 없이 표 문법을 구현할 수 있습니다. 다만 다소 불편합니다.
- 표 문법의 경우 ‘|-’를 중복해서 쓸 수 있기 때문에 문제를 회피할 방법이 있습니다. {{생물 분류}}를 참고하십시오.
|