리버티게임:특수 함수

리버티게임, 모두가 만들어가는 자유로운 게임
단축:
괴:함_
Uncycloversity-prison-logo-ko-copy.png
백괴대학교의 강의를 들어 특수 함수에 대하여 더 자세히 알 수 있습니다.
백괴대학:본관/특수함수 응용

미디어위키에 기본으로 설치되어 있거나 미디어위키에서 제공되는 확장 기능을 통해 사용할 수 있는 '특수 함수'로 더 복잡하고 자세한 것을 구현할 수 있습니다. 대개 '특수 함수'라 하면 초보 사용자들은 어려움을 느끼기 마련인데, 일단 배워서 익숙해지면 사용하기 쉬울 것입니다.

#expr

#expr은 간단한 계산을 할 수 있는 기능으로, 다음과 같이 사용합니다.

{{#expr:계산식}}
연산자 기능 예제
- {{#expr:1234567890}} = 1234567890
{{#expr:0.1}} = 0.1
{{#expr:123456789012345}} = 1.2345678901234E+1415자리 이상은 정수 계산이 깨집니다. 주의해주세요.
{{#expr:e}} = 2.718281828459
{{#expr:pi}} = 3.1415926535898
( ) 괄호 {{#expr:(30+7)*7}} = 259
+ 양수 부호 {{#expr:+30*+7}} = 210
- 음수 부호 {{#expr:-30*-7}} = 210
not 부정문 {{#expr: not 0 * 7}} = 7
{{#expr: not 30+7}} = 7
^ 제곱 {{#expr: 2 ^ 5}} = 32
* 곱셈 {{#expr: 30 * 7}} = 210
/ 나눗셈 {{#expr: 30 / 7}} = 4.2857142857143
div 나눗셈. /과 같음 {{#expr: 30 div 7}} = 4.2857142857143
{{#expr: 5 div 2 * 2 + 5 mod 2}} = 6
mod 정수 나눗셈을 한 나머지를 구합니다.

주의: 다른 프로그래밍 언어와 작동 방식이 다릅니다.

{{#expr: 30 mod 7}} = 2
{{#expr: -8 mod -3}} = -2
{{#expr: -8 mod +3}} = -2
{{#expr: 8 mod 2.7}} = 0
{{#expr: 8 mod 3.2}} = 2
{{#expr: 8.9 mod 3}} = 2
+ 덧셈 {{#expr: 30 + 7}} = 37
- 뺄셈 {{#expr: 30 - 7}} = 23
round 반올림 계산을 합니다. {{#expr: 30 / 7 round 3}} = 4.286
{{#expr: 30 / 7 round 0}} = 4
{{#expr: 3456 round -2}} = 3500
= 등호 {{#expr: 30 = 7}} = 0
<> 부등호. 다를 경우에 true=1, 같을 경우에 false=0이 나옵니다. {{#expr: 30 <> 7}} = 1
!= 부등호. <>와 같습니다. {{#expr: 1 != 0}} = 1
< 작다 {{#expr: 30 < 7}} = 0
> 크다 {{#expr: 30 > 7}} = 1
<= 작거나 같다 {{#expr: 30 <= 7}} = 0
>= 크거나 같다 {{#expr: 30 >= 7}} = 1
and Logical AND {{#expr: 4<5 and 4 mod 2}} = 0
or Logical OR {{#expr: 4<5 or 4 mod 2}} = 1

입력할 때에 0이 false, 나머지의 값이 true로 처리됩니다. 계산 결과로는 false가 0, true가 1로 나옵니다.

#if

#if는 조건문의 하나로, 다음과 같이 사용합니다.

{{#if: 문자열 | 문자열이 비어있지 않으면 나올 문장 | 문자열이 비어있을 때 나올 문장}}

이때 거짓일때 나올 문장은 생략할 수 있습니다.

예를 들면 다음과 같은 조건문이 있을 때:

{{#if: {{{parameter|}}} | parameter는 {{{parameter}}}입니다. | parameter가 없습니다.}}

{{틀|parameter=aaa}}의 결과는 다음과 같습니다.

parameter는 aaa입니다.

{{틀}}의 결과는 다음과 같습니다.

parameter가 없습니다.

{{틀|parameter=}}의 결과는 다음과 같습니다.

parameter가 없습니다.

주의해야 할 점은, 이것은 기존의 {{{parameter|}}} 동작과 다릅니다. 다음의 두 작동을 비교해 보세요.

{{{parameter|없음}}} {{#if: {{{parameter|}}} | {{{parameter}}} | 없음}}
{{틀|parameter=a}} a a
{{틀}} 없음 없음
{{틀|parameter=}} 없음

또한, 조건이 참/거짓일 때 나오는 문장에는 자동으로 앞뒤로 빈 문자열이 삭제됩니다.

#ifeq

{{#ifeq: 문자열 1 | 문자열 2 | 같을 경우 | 다를 경우}}
  • {{#ifeq: aa | aa | same | different}} -> same

문자열 부분에 숫자가 들어오면 숫자 값으로 검사합니다.

  • {{ #ifeq: +07 | 007 | 1 | 0 }} -> 1
  • {{ #ifeq: "+07" | "007" | 1 | 0 }} -> 0

매개변수가 정의되었는지를 #if로는 검사할 수 없습니다. 이를 검사하려면 #ifeq문을 사용해야 합니다.

  • {{ #if: {{{x| }}}|not blank|blank}} = blank
  • {{ #ifeq: {{{x| }}}| |blank|not blank}} = blank
  • {{ #ifeq: {{{x| }}}|{{{x|u}}}|defined|undefined}} = undefined

#ifexist

{{#ifexist: 문서 이름 | 문서가 있을 경우 | 문서가 없을 경우}}

만약 문서 이름에 인터위키백괴사전 문서나 다른 언어의 백괴사전 문서로의 링크를 넣으면 결과는 항상 문서가 없는 경우로 나옵니다.

#ifexpr

{{#ifexpr: 계산식 | true일 경우 | false일 경우}}

계산식이 빈 문자열일 때도 false가 나옵니다.

  • {{#ifexpr: {{ns:0}}|Toast|'''or else'''}} = or else

true, false 두 문장을 쓰지 않으면 아무 것도 출력되지 않습니다. 단, 오류가 있을 경우에는 오류 메시지가 출력됩니다. 이를 이용해서 수식에 오류가 있는지 없는지 확인하는 것도 가능합니다.

  • {{#ifexpr: 1/0}} -> 0으로 나눴습니다.
  • {{#if: {{#ifexpr: 1/0}} | 오류 있음 | 오류 없음}} -> 오류 있음
  • {{#if: {{#ifexpr: 0}} | 오류 있음 | 오류 없음}} -> 오류 없음

#iferror

{{#iferror: 주어진 단락 | 에러 포함일 경우 | 미포함일 경우}}

주어진 단락의 오류 포함 여부를 검사하는 함수입니다.

  • {{#iferror: {{#expr: 1 < 0}} | 오류 | 정상 }} -> 정상
  • {{#iferror: {{#expr: X}} | 오류 | 정상 }} -> 오류

에러는 HTML 클래스 error를 통해 발생시킬 수 있습니다.

  • {{#iferror: b <span class="error"></span> b| 오류 | 정상 }} -> 오류
  • {{#iferror: <div style="display: none;"><span class="error">b</span></div>| 오류 | 정상 }} -> 오류

#ifanon, #ifblocked, #ifsysop

현재 작동하지 않는 기능입니다.

사용자의 여부와 관련된 특수 함수로 #ifanon은 익명 (IP 사용자)의 여부를 알려주며, #ifblocked는 차단 당했는지의 여부를, #ifsysop는 관리자의 여부를 알려줍이다.

{{#ifanon: 참 | 거짓}}

여기서 익명일 때에는 참을, 아닐 때에는 거짓을 출력합니다.

너가 익명인가? 참

이 때 #ifanon 뿐만 아니라 #ifblocked와 #ifsysop도 사용법은 같습니다.

#ifingroup

#ifingroup은 소속된 사용자 권한 그룹의 여부를 알려줍니다.

{{#ifingroup: 그룹 | 구성원일 경우 | 구성원이 아닐 경우}}

이 때 그룹에는 autoconfirmed자동 인증된 사용자, sysop관리자, user사용자, rollback롤백을 입력할 수 있습니다.

아래는 예제입니다.

너가 자동으로 인증된 사용자인가? {{#ifingroup:autoconfirmed|참|거짓}}

아래는 결과입니다.

너가 자동으로 인증된 사용자인가?  거짓

#switch

다른 프로그래밍 언어의 switch문과 비슷한 구조를 가지고 있습니다.

{{ #switch: 비교할 값
| <value1> = <result1>
| <value2> = <result2>
| ...
| <valuen> = <resultn>
| <default result>
}}

마지막 default값은 모든 비교가 실패했을 때의 값으로, 항상 있어야 합니다.없으면 비교가 실패했을 때 아무것도 출력하지 않습니다. 만약 default 값에 등호가 들어간다면, #default = <값>를 사용할 수 있습니다.

#time, #timel

{{ #time:  형식 }}
{{ #time:  형식 | 시간 }}
{{ #timel:  형식 }}
{{ #timel:  형식 | 시간 }}

#time은 UTC 시간대의 시간을, #timel은 사용자가 접속한 시간대(UTC+9)의 시간을 표시합니다.

코드 설명 예시 현재 (time) 현재 (timel)
Y 네 자리 연도 예: 2006 2024 2024
y 두 자리 연도 00~99,
예: 06=2006.
24 24
L 윤년일 경우 1이면 윤년, 0이면 평년 1 1
n 현재 달(앞에 0이 붙지 않음) 1~12 11 11
m 현재 달(앞에 0이 붙음) 01~12 11 11
M 줄인 달 이름 1~12 11 11
F 달 이름 1월~12월 11월 11월
t 각 달에 있는 날짜 수 28~31 30 30
j 현재 날(앞에 0이 붙지 않음) 1~31 12 13
d 현재 날(앞에 0이 붙음) 01~31 12 13
z 그 해부터 지난 날수(0부터 시작함) 0~364, 윤년일 경우 365까지 316 317
D 줄인 요일 이름 월~일
l 요일 이름 월요일~일요일 화요일 수요일
w 요일 숫자(미국식) 0(일요일)~6(토요일) 2 3
N 요일 숫자(ISO 8601 방식). 1(월요일)~7(일요일) 2 3
W ISO 8601 주 숫자(ISO 연도는 월요일부터 일요일까지 완전히 있어야 한 주로 치고, 첫 번째 주는 늘 1월 4일이나 역년 목요일을 포함한다.). 1~52 또는 53 (년도에 따라 다름) 46 46
a am(같은 날 01:00:00부터 12:59:59까지)이나 pm을 소문자로 나타낸다(시간 단위를 12시간제로 표시할 때 쓴다.). am이나 pm pm am
A a와 같지만, 대문자로 나타낸다. AM이나 PM PM AM
g 시간을 12시간 단위로 표기하되, 앞에 0을 붙이지 않음(1, 2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). 1~12 10 07
h 시간을 12시간 단위로 표기하되, 앞에 0을 붙임(2자리이고 am/pm 또는 AM/PM과 같이 쓴다.). 01~12 10 07
G 시간을 24시간 단위로 표기하되, 앞에 0을 붙이지 않음(1자리 또는 2자리). 0~23 22 7
H 시간을 24시간 단위로 표기하되, 앞에 0을 붙임(2자리). 00~23 22 07
i 분(2자리). 00~59 54 54
s 초(2자리). 00~59 31 31
U 1970년 1월 1일 00:00:00 UTC부터 흐른 초 수. 0~2147483647 1731452071 1731452071
c ISO 8601 형식을 따른 날짜로, {{#time:Y-m-dTH:m:s{{#time:+H:m|+0 hours}}}}와 같다. fixed length string 2024-11-12T22:54:31+00:00 2024-11-13T07:54:31+09:00
r RFC 2822 형식을 따른 날짜로, {{#time:D, j M Y H:m:s {{#time:+H:m|+0 hours}}}}와 같다. variable length string Tue, 12 Nov 2024 22:54:31 +0000 Wed, 13 Nov 2024 07:54:31 +0900

예제

  • {{ #time: Y년 M월 j일 l | 20070304 }} → "2007년 3월 4일 일요일"
  • {{ #time: Y년 M월 j일 l | 2007-3-4 }} → "2007년 3월 4일 일요일"
  • {{ #time: Y년 M월 j일 l | 4 March 2007 }} → "2007년 3월 4일 일요일"
  • {{ #time: Y년 M월 j일 l | -32 days }} → "2024년 10월 11일 금요일" (32일 전)
  • {{ #time: H:i | +9 hours }} → "07:54" (UTC보다 9시간 빠름)
  • {{ #time: H:i | 8:15 +9 hours }} → "17:15"
  • {{ #time: Y/m | -17 months }} → "2023/06" (17개월 전)
  • {{ #time: [[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일

  • {{ #time: j|February 29 2006 }} → 1
  • {{ #time: j|February 29 2008 }} → 29

#rel2abs

상대 주소를 절대 주소로 바꿔줍니다.

  • “백괴게임:가나/다라”에서 {{ #rel2abs: ../마바 }}를 호출한 경우, 결과는 백괴게임:가나/마바가 됩니다.
  • “백괴게임:가나”에서 {{ #rel2abs: ../마바 }}를 호출한 경우, 결과는 마바가 됩니다.
  • “백괴게임:가나”에서 {{ #rel2abs: ../../마바 }}를 호출한 경우, 아래와 같은 오류 메시지가 출력됩니다.
    • 오류: 경로 구조가 잘못되었습니다: "백괴게임:가나/../../마바" (루트 노드 위의 노드에 접속을 시도했습니다)
  • {{ #rel2abs: ../마바 | 백괴게임:가나/다라 }}를 호출한 경우, 결과는 백괴게임:가나/마바가 됩니다.
  • {{ #rel2abs: 백괴게임:가나/다라/../마바 }}를 호출한 경우, 결과는 백괴게임:가나/마바가 됩니다.

#language

해당 언어 코드에 맞는 언어명을 출력합니다.

  • {{ #language: ko }} → 한국어
  • {{ #language: vi }} → Tiếng Việt
  • {{ #language: zh-min-nan }} → Bân-lâm-gú

#var , #vardefine

#var 과 #vardefine은 변수를 지정하고 사용할 수 있는 함수로 다음과 같이 사용합니다.

{{#vardefine: 변수이름 | 변수값 }}
{{#var: 변수이름 }}

이렇게 사용할 수 있습니다.

{{#vardefine:sky|blue}}
Sky is {{#var:sky}}

아래는 결과값입니다.

Sky is blue

#sub

#sub는 문자열을 한글과 영어,일본어 상관없이 자를수 있는 함수로 다음과 같이 사용합니다.

{{#sub: 자를문자열 | 숫자1 | 숫자2 }}

자를문자열의 숫자1번째부터 시작해서 숫자2만큼 잘라서 뽑아와줍니다. 아래는 예제입니다.

{{#sub:sky dum dummy dummss|0|3}} is blue

아래는 결과값입니다.

sky is blue

#len

#len는 문자열의 개수를 세주는 함수로 다음과 같이 사용합니다.

{{#len: 문자열 }}

아래는 예제입니다.

"Nu is babo"의 길이는 {{#len:Nu is babo}}입니다.

아래는 결과값입니다.

"Nu is babo"의 길이는 10입니다.

#pos

#pos는 문자열에 어떤 문자를 찾아서 맨처음으로 찾아진 문자가 어디에 위치해 있는지 확인해주는 함수로 다음과 같이 사용합니다.

{{#pos: 문자열 | 찾을 문자 }}

아래는 예제입니다.

"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#pos:Nu와 GNU가 싸우면 GNU가 이긴다.|GNU}}입니다.

아래는 결과값입니다.

"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 4입니다.

#rpos

#rpos는 문자열에 어떤 문자를 찾아서 마지막으로 찾아진 문자가 어디에 위치해 있는지 확인해주는 함수로 다음과 같이 사용합니다.

{{#rpos: 문자열 | 찾을 문자 }}

아래는 예제입니다.

"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 {{#rpos:Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다.|GNU}}입니다.

아래는 결과값입니다.

"Nu와 GNU가 싸우면 GNU가 이긴다. 왜냐하면 GNU가 이름이 제일 길기 때문이다."에 "GNU"의 위치는 28입니다.

#replace

#replace는 문자열에서 특정 단어를 찾아서 다른 단어로 치환해주는 함수로 다음과 같이 사용합니다.

{{#replace:문자열|특정 단어|다른단어}}

아래는 예제입니다.

"Nu는 바보다" 에서 Nu를 GNU로 바꾸면 "{{#replace:Nu는 바보다|Nu|GNU}}"입니다.

아래는 결과값입니다.

"Nu는 바보다" 에서 Nu를 GNU로 바꾸면 "GNU는 바보다"입니다.

#titleparts

  1. titleparts는 페이지 제목을 조금 더 정교하게 자르기 위한 것입니다. Magic Words 중 하나인 {{PAGENAME}}류와 함께 쓰면 더욱 효과적입니다.
{{#titleparts: 페이지명 | 반환할 구역 수 | 반환할 첫번째 구역 }}

구역이라는 것은 상위/하위 문서 하나 단위를 의미합니다. 예제를 보겠습니다.

{{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|2}}

이와 같이 하면 다음과 같이 출력됩니다. 두번째 변수가 없으면 처음부터 앞에 쓴 숫자만큼 잘라버립니다.

백괴책:낚시학개론/둘째낚시

다른 예제를 보겠습니다.

{{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|3|2}}

이는 3개만큼 자르되 2번째 칸부터 시작한다는 뜻입니다. 첫번째 변수(빨간 글씨)를 생략할 시는 기본값이 1로 지정됩니다. 따라서 결과는 다음과 같습니다.

둘째낚시/셋째낚시/넷째낚시방

#titleparts는 음수도 가능합니다.

{{#titleparts: 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방/마지막이다|-1}}

음수의 경우 뒤쪽부터 셉니다. 따라서 이렇게 입력하였을 때의 결과는 백괴책:낚시학개론/둘째낚시/셋째낚시/넷째낚시방이 됩니다. 같은 원리로, 첫째 변수가 아닌 둘째 변수가 -1일 시에는 마지막이다가 나옵니다.