[주의!] 문서의 이전 버전(에 수정)을 보고 있습니다. 최신 버전으로 이동
1. 개요2. true, false3. 부등호, 숫자 연산 기호4. 논리식, 비트식5. % 기호 테스트6. null 과 "" 테스트7. 수 체계 확장 테스트8. 비트 연산 테스트9. @매개변수@로 include, this, wiki, style 문법 테스트10. 문자열 검토 연산자 테스트11. 변수값 정의 및 재정의 테스트
11.1. 텍스트값 재정의 테스트11.2. 반점() true, false 중첩 테스트11.3. 숫자값 재정의 테스트11.4. 문단을 초월하는 변수값 정의11.5. 변수 값 변화 주기 (증가, 감소)11.6. and(&&) 와 or(||)를 이용한 변수값 정의11.7. null 병합 연산자 ??
12. 다른 링크, 틀 출력 테스트13. 리스트(List) 변수 테스트14. 변수값 형식 동치 테스트15. 프로그래밍 정수값16. table if (if > print)17. 메모18. 결론(hide되어 있는 목차를 눌러 펼쳐보실 수 있습니다.)
1. 개요[편집]
나무위키:문법 도움말/심화 문서의 if 문단도 참고.
if 구문(if 문법) 테스트용 위키위키 문서.
편집하거나 검증할 때 RAW(원문)를 참조할 수 있다.
if 구문은 문서에서만이 아니라 토론 스레드에도 지원된다.
if 구문(if 문법) 테스트용 위키위키 문서.
편집하거나 검증할 때 RAW(원문)를 참조할 수 있다.
if 구문은 문서에서만이 아니라 토론 스레드에도 지원된다.
2. true, false[편집]
#!undefined_command ==1
1위와 같이 정의되지 않는 #!(Shebang) 구문(문법)이면 리터럴로 출력되어야 하겠으나 if는 그렇지 않다.[1] #! 뒤에 if true로 적어보자면 출력된다. true와 반대되는 false를 #!if 다음에 적어놓고 테스트해보면 출력되지 않음을 볼 수 있다.
결론 : if는 지원되는 구문이며 true는 논리값 true로 동작된다.
3. 부등호, 숫자 연산 기호[편집]
부등호 계산으로 조건식을 만들 때, 음수값도 읽을 수 있다.
축약 | 뜻 | 주의사항 |
greater | ||
geq | greater than or equal to | >=로 입력 안 하고 =>로 입력하면 깨진다. |
1>=1 을 조건으로 걸면 true가 된다. | ||
leq | less than or equal to | <=로 입력 안 하고 =<로 입력하면 깨진다. 한 때 (<=) 로 해도 나오지 않다가 |
1<=1 을 조건으로 걸면 true로 나온다 |
- * 기호는 "곱(times) 기호이다. 식을 틀리게 만들면 출력되지 않는다. (따라서 *는 지원되는 모양이다.)
- / 기호는 "나누기(devided by)" 기호이다. / 식을 틀리게 만들면 나오지 않는다. (따라서 /는 지원되는 모양이다.)
결론 : * / > >= < <= 연산기호는 지원된다.
4. 논리식, 비트식[편집]
4.1. |, & 기호[편집]
4.1.1. 논리 연산[편집]
두 식을 두고 | 기호 테스트를 해보았을 때, 두 식이 모두 참일 때는 당연히 출력되며 마주 보는 두 식중 오른쪽이 거짓이 되었든 왼쪽이 거짓이 되었든 하나가 거짓이라 하더라도 나머지 하나가 참이라면 출력이 된다. 양쪽의 식 모두가 거짓(false)이라면 출력되지 않는다.
앞의 true와 false가 진짜 true, false로 동작되는지 확인해보는 겸 테스트를 해보자면 true | true 로 적었을 때 출력이 된다. true | false 로 조건을 적든 false | true로 조건을 적든 출력이 되므로 true와 false는 true와 false가 맞다. false | false 로 if를 걸었을 때 출력할 문구가 나오지 않는 상황을 보면 true가 true이고 false는 false임이 확실하다.
그러므로 | 기호는 논리연산 OR에 해당된다.
만약 | 기호를 하나만 적지 않고 2개를 적어보면 어떻게 될까? 마찬가지로 동작된다. 그러나 |기호를 3개를 적어 식으로 걸어보면 동작되지 않는다.
앞의 true와 false를 다시 가져와서 & 기호 테스트를 할 수 있다. 양쪽 모두 true일 경우 (true & true) 출력할 문구가 나온다. 어느 한 쪽이 false가 되면 출력되지 않고, 양쪽 모두 false가 된다면 출력되지 않는다.
앞의 true와 false가 진짜 true, false로 동작되는지 확인해보는 겸 테스트를 해보자면 true | true 로 적었을 때 출력이 된다. true | false 로 조건을 적든 false | true로 조건을 적든 출력이 되므로 true와 false는 true와 false가 맞다. false | false 로 if를 걸었을 때 출력할 문구가 나오지 않는 상황을 보면 true가 true이고 false는 false임이 확실하다.
그러므로 | 기호는 논리연산 OR에 해당된다.
만약 | 기호를 하나만 적지 않고 2개를 적어보면 어떻게 될까? 마찬가지로 동작된다. 그러나 |기호를 3개를 적어 식으로 걸어보면 동작되지 않는다.
앞의 true와 false를 다시 가져와서 & 기호 테스트를 할 수 있다. 양쪽 모두 true일 경우 (true & true) 출력할 문구가 나온다. 어느 한 쪽이 false가 되면 출력되지 않고, 양쪽 모두 false가 된다면 출력되지 않는다.
4.1.2. 비트 연산[편집]
| 기호, & 기호가 2진수 비트합으로도 처리되는 상황을 설명하자면 true와 false 진리값이 각각 1, 0인 논리를 시스템상을 먼저 볼 필요가 있다.
OR(∨), AND(∧)는 위 표와 같이 처리된다. 2진법 수의 각 자리수에 따라 true를 1, false를 0으로 놓고 | 연산은 OR(∨)처럼, &연산은 AND(∧)처럼 동작된다.
이를테면 5 | 3을 보자면 이진법으로 변환한 값의 각 자릿수에 따라 연산이 되어 7이 나오므로
만약 (5|3)==6이나 (9|5)==12를 테스트하게 되면 두 식 모두 일(20)의 자릿수가 틀려 출력할 문구가 나오지 않는다.
& 기호를 이용한 연산의 예로
* 부등호 식으로도 true와 false를 만들 수 있다.
|
| ||||||||||||||||||||||||||||||||||||||||
OR 연산 처리 | AND 연산 처리 |
OR(∨), AND(∧)는 위 표와 같이 처리된다. 2진법 수의 각 자리수에 따라 true를 1, false를 0으로 놓고 | 연산은 OR(∨)처럼, &연산은 AND(∧)처럼 동작된다.
이를테면 5 | 3을 보자면 이진법으로 변환한 값의 각 자릿수에 따라 연산이 되어 7이 나오므로
(5|3)==7
만을 if 조건문으로 걸게 되면 동작된다. 다른 예로 (9|5)==13
을 걸게 되면 역시 동작된다.10진수 | 22 | 21 | 20 |
5 = | 1 | 0 | 1 |
3 = | 0 | 1 | 1 |
(5|3) = 7 | 1 | 1 | 1 |
10진수 | 23 | 22 | 21 | 20 |
9 = | 1 | 0 | 0 | 1 |
5 = | 0 | 1 | 0 | 1 |
(9|5) = 13 | 1 | 1 | 0 | 1 |
만약 (5|3)==6이나 (9|5)==12를 테스트하게 되면 두 식 모두 일(20)의 자릿수가 틀려 출력할 문구가 나오지 않는다.
& 기호를 이용한 연산의 예로
(25&19)==17
이나 (20&11)==0
을 조건문에 넣어보면 출력할 문구가 나온다. (25&19)==19를 보면 21의 자릿수가 틀려서 출력되지 않는다.10진수 | 24 | 23 | 22 | 21 | 20 |
25 | 1 | 1 | 0 | 0 | 1 |
19 | 1 | 0 | 0 | 1 | 1 |
(25&19) = 17 | 1 | 0 | 0 | 0 | 1 |
10진수 | 24 | 23 | 22 | 21 | 20 |
20 | 1 | 0 | 1 | 0 | 0 |
11 | 0 | 1 | 0 | 1 | 1 |
(20&11) = 0 | 0 | 0 | 0 | 0 | 0 |
* 부등호 식으로도 true와 false를 만들 수 있다.
4.2. ^ 기호[편집]
4.2.1. 논리 연산[편집]
계산기로
겉보기에는 돌아갈 것 같이 생겼다. 그런데 틀리게 해도 나오는 것으로 봐서는 지원되지 않는 모양이다?[3]
출력 (^기호)
true와 false로 ^기호를 연산해보면 다음과 같이 된다.
^
기호를 입력하면 exponent?가 되므로 10^4==1000이 {{{#!if 10^4==10000겉보기에는 돌아갈 것 같이 생겼다. 그런데 틀리게 해도 나오는 것으로 봐서는 지원되지 않는 모양이다?[3]
출력 (^기호)
true와 false로 ^기호를 연산해보면 다음과 같이 된다.
case1 | case2 | case3 | case4 | |
A | true | true | false | false |
B | true | false | true | false |
A^B | false | true | true | false |
true ^ false 또는 false ^ true일 경우에 true가 되며 false ^ false, true ^true는 false가 되므로 false ^ false와 true ^ true를 if 다음에 적고 테스트해보면 출력되지 않는다.
A^B==C ()꼴을 if 조건문으로 걸어 놨는데 true가 된 것은, ==를 먼저 연산해서 A^false가 되었는데 A가 0이 아니므로 true로 읽히게 되어 A^false가 true로 반환돼서 if 조건문이 true로 되어버린 모양.
1^2==3 : 1^false가 되어 출력된다.
출력
1^2==3 : 1^false가 되어 출력된다.
출력
1^1==1 : 1^true가 되어 출력되지 않는다.
0^1==2 : 0^false가 되어 출력되지 않는다.
0^1==1 : 0^true가 되어 출력된다.
출력
출력
결론
: ^는 논리연산 XOR
그런데 희한한 것이, &&는 되고 ||는 되는데 ^^는 안 나온다. ^를 2개 이어 적으면 어느 문법과 중첩이 되는 것인가?(RAW 참고)
4.2.2. 비트 연산[편집]
| 기호, & 기호와 같이 2진법의 각 자릿수별로 계산된다.
10진법 | 24 | 23 | 22 | 21 | 20 |
20 | 1 | 0 | 1 | 0 | 0 |
11 | 0 | 1 | 0 | 1 | 1 |
(20^11)=31 | 1 | 1 | 1 | 1 | 1 |
(20^11)=31 : 출력된다.
출력 (20^11)=31
출력 (20^11)=31
(20^11)=30 : 20의 자릿수가 틀려서 출력되지 않는다.
양변에 ^을 걸어도 출력된다.
10진법 | 24 | 23 | 22 | 21 | 20 |
17 | 1 | 0 | 0 | 0 | 1 |
14 | 0 | 1 | 1 | 1 | 0 |
(17^14)=31 | 1 | 1 | 1 | 1 | 1 |
(20^11)==(17^14) : 출력된다.
출력
출력
(20^10)==(17^14) : 20의 자릿수가 틀려서 출력되지 않는다.
4.3. ture, false, !기호 테스트[편집]
false == false : 출력된다.
출력 (f=f)
출력 (f=f)
true == true : 출력된다.
출력 (t=t)
출력 (t=t)
false == true : 출력되지 않는다.
false != true : 출력된다.
출력 (!= 기호)
출력 (!= 기호)
1!=0 : 출력된다.
출력 (1!=0)
출력 (1!=0)
1 !=0 : 출력된다.
출력 (1 !=0)
출력 (1 !=0)
1 !==0 : 출력되지 않는다.
!(1==0) : 출력된다.
출력 !(1==0)
출력 !(1==0)
1<0 : 출력되지 않는다.
1 !< 0 : 출력되지 않는다.
1 !(<) 0 : 출력되지 않는다. 부등호에 걸 수 있는 기호가 아니라서 깨진 모양이다.
!(1<0) : 출력된다.
출력 !(1<0)
출력 !(1<0)
!(true and true) : 출력되지 않는다.
!(true and false) : 출력된다.
출력 !(t&f)
출력 !(t&f)
!(false and false) : 출력된다.
출력 !(f&f)
그냥 and 식 전체에 ! 씌우면 nand가 된다.
출력 !(f&f)
그냥 and 식 전체에 ! 씌우면 nand가 된다.
!(true ^ true)
출력 !(t^t)
출력 !(t^t)
!(true ^ false)
!(false ^ true)
!(false ^ false)
출력 !(f^f)
그냥 ^ 식 전체에 ! 씌우면 xand(nxor)이다.
출력 !(f^f)
그냥 ^ 식 전체에 ! 씌우면 xand(nxor)이다.
!(!true) : 출력된다 (not of not)
출력 !(!t)
출력 !(!t)
!!true : 출력되지 않는다. !는 범위를 입력해줘야 동작되는 모양.
not of not of not of true : 출력되지 않는다.
not of not of not of not of true 사각형안의사각형안의 : 출력된다.
출력 !(!(!(!t)))
출력 !(!(!(!t)))
0 : 진리값 0 (false)으로 읽히는지 출력되지 않는다.
!(0) : 출력된다.
출력
출력
1 : 진리값 1 (true)으로 읽히는지 출력된다.
출력
출력
!(1) : 출력되지 않는다.
2 : 출력된다.
출력
출력
!(2) : 출력되지 않는다.
0.5 : 출력된다.
출력
출력
!(0.5) : 출력되지 않는다.
결론 : !는 논리연산 NOT이고, 범위를 지정해줘야 동작된다.
0만 아니면 될까?
4.4. ~ 기호[편집]
~false : 출력된다.
출력 ~f
출력 ~f
~(~true) : 출력된다.
출력 ~(~t)
출력 ~(~t)
~(!(~(!true))) : 출력된다.
출력 ~(!(~(!t)))
출력 ~(!(~(!t)))
~true : 출력된다.
출력 ~t
출력 ~t
~(true) : 출력된다.
출력 ~(t)
출력 ~(t)
(~true) : 출력된다.
출력 (~t)
출력 (~t)
~~true : 출력된다.
출력 ~~t
출력 ~~t
~(-1)=0 : 출력된다.
출력
출력
~(-1)=1 : 출력되지 않는다.
~(-2)=1 : 출력된다.
출력
출력
~(~1)=1 : 출력된다.
출력
출력
~false=false : 출력되지 않는다.
~false=true : 출력되지 않는다.
~(!(true))=false : 출력되지 않는다.
결론 : ~ 기호는 논리 연산으로는 동작되지 않는다.
다만 위의 ~(-1)==1 을 가져와서 비트 연산이 참인지 거짓인지 나오는 결과를 두고 논리식을 만들기는 가능하다.
!(~(-1)==1) : false 부정이므로 출력된다.
출력
다만 위의 ~(-1)==1 을 가져와서 비트 연산이 참인지 거짓인지 나오는 결과를 두고 논리식을 만들기는 가능하다.
!(~(-1)==1) : false 부정이므로 출력된다.
출력
5. % 기호 테스트[편집]
식을 틀리게 적으면 출력되지 않는다.
6. null 과 "" 테스트[편집]
""과 ""은 같다.
출력
출력
Null과 ""은 다르다.
좌 우를 바꿔 적어도 다르다.
null과 null은 같다.
출력
출력
if null 은 출력되지 않는다.
그럼 앞에서 if false도 출력되지 않았으니까 null==false일까?
null=false 테스트 하면 출력되지 않는다.
null과 false는 같지 않다. (나무위키 도움말에서) if null이면 거짓이므로 출력이 안 되는 것이 아니라, if 조건부 null이 true 논리값으로 나오지 않아서 출력이 안 되는 것이다.틀린 말은 아닌데, 팩트가 하나도 없으면 참은 아니기 때문이다.
null=false 테스트 하면 출력되지 않는다.
null과 false는 같지 않다. (나무위키 도움말에서) if null이면 거짓이므로 출력이 안 되는 것이 아니라, if 조건부 null이 true 논리값으로 나오지 않아서 출력이 안 되는 것이다.
null과 true는 다르다. null=true 테스트를 하면 출력되지 않는다.
그리고 if ""를 해도 출력되지 않는다.
결론 1 : 호출할 때
결론 2 : true, false는 "정의한 논리값"이므로 null과 다르다.
기타 : if 구문에 숨은 함수나 연산자가 있는지 찾아보고 싶다면 아무 텍스트[5]를 가지고 와서 null과 같은지 대조해보면 된다.
변수명=
이라고 적으면 변수명은 "정의한 값이 없음(null)"이 아니라 "빈 텍스트 값"이 된다.결론 2 : true, false는 "정의한 논리값"이므로 null과 다르다.
기타 : if 구문에 숨은 함수나 연산자가 있는지 찾아보고 싶다면 아무 텍스트[5]를 가지고 와서 null과 같은지 대조해보면 된다.
{{{#!if (입력한 텍스트)==null
피노키오의 코는 길어지지 않았다.}}}
입력한 텍스트가 단순 변수명이면 식이 "변수명=null"이 되어 true가 되어 출력할 내용이 나올 것이고, 입력한 텍스트가 연산자이면 출력되지 않을 것이다.
7. 수 체계 확장 테스트[편집]
- 소수의 비밀
요약해보자면, 소수값은 2진법 버림값으로 저장되므로 미묘한 오차가 발생한다고 한다.
실제 테스트 해보면 1.1+0.1은 1.1으로 저장되는 값과 0.1으로 저장되는 값을 더하는데, 1.2으로 저장되는 값보다 크게 나오므로 1.1+0.1>1.2가 된다.
제곱근을 구하고자 a**0.5 같은 식을 만들어도 되기는 하지만, 마찬가지로 저장되는 값을 참고하는 모양으로 보인다.
지수의 지수
2
출력
2
22
=16 : 출력된다.출력
2
22
=15로 하면 출력되지 않는다.3
출력
32
=39=19683 : 출력된다.출력
3
32
=39=19682 : 출력되지 않는다.지수의 지수의 지수
2
출력
2
2
=216=65536 : 출력된다.22
출력
2
2
=216=65535 : 출력되지 않는다.22
무한 지수 탑 함수 테스트를 해볼 겸 지수의 지수의 지수의 지수(...)를 테스트 해볼 수는 있겠지만 적당한 값을 넣어야 한다. 가령 2
2
를 계산기에서 계산하면 2
22
오버플로가 나온다.출력
8. 비트 연산 테스트[편집]
Zeroization. 자기 자릿수 이상으로 밀어버리면 0이 된다.
1>>1=0 : 출력된다.
출력
1>>1=0 : 출력된다.
출력
42<26=64이므로 2진법으로 6자리 숫자임을 이용.
42>>5==1 : 출력된다.
출력
42>>5==1 : 출력된다.
출력
42>>5==0 : 42의 25 자릿수가 1이었으므로 출력되지 않는다.
42>>6==1 : 출력되지 않는다.
42>>6==0 : 출력된다.
출력
출력
42>>7==0 : 출력된다.
출력
출력
42=101010(2)
95=1011111(2)
42>>3==5, 95>>4==5이므로 42>>3==95>>4는 출력된다.
출력
95=1011111(2)
42>>3==5, 95>>4==5이므로 42>>3==95>>4는 출력된다.
출력
9. @매개변수@로 include, this, wiki, style 문법 테스트[편집]
→ 매개변수 대상에 대한 자세한 내용은 테스트:if문법/include 대상 문서를 참고하십시오.
→ 매개변수 대상의 include 테스트 결과에 대한 자세한 내용은 테스트:if문법/include 결과 문서를 참고하십시오.
- ??? : Madness? [펼치기·접기]
THIS IS SPARTA!!!
if 문법이 도입되기 이전에도
{{{#!wiki style="@매개변수명@"
}}}
같은 원문이 든 문서를 include하고 매개변수명에 CSS 속성에 해당하는 텍스트 값을 넣어 출력을 할 수 있었다. 이는 아카라이브 채널위키에서 이런 문서를 예시로 들 수 있다.
결론 1 :
숫자 값으로 나오게 하고 싶으면
숫자 값으로 연산할 경우 변수를 괄호로 묶어주어야 조건식에 오류가 나지 않는다.
예 :
결론 2 :
결론 1 :
this['변수명']
(작은따옴표), this["변수명"]
(큰따옴표)는 텍스트값으로 출력된다. this[+변수명]
, this[변수명]
은 올바른 입력이 아니다.숫자 값으로 나오게 하고 싶으면
+this['변수명']
(작은따옴표), +this["변수명"]
(큰따옴표) 등 알맞은 양식으로 적어야 한다.숫자 값으로 연산할 경우 변수를 괄호로 묶어주어야 조건식에 오류가 나지 않는다.
예 :
(+this['aaa'])+(+this['bbb'])
결론 2 :
this.변수명
은 양식만 잘 맞추면 텍스트값이나 숫자값으로 출력된다.10. 문자열 검토 연산자 테스트[편집]
Javascript에 지원되는 string(문자열 값) 관련 연산자(함수) 중 indexOf, startsWith, endsWith 등은 분명히 지원되며 동작이 같다. JSON으로 돌아가는데 Javascript가 빠질 리가 없다.
관련 문서 : Mozilla MDN Web Docs, JavaScript/Reference/Global_Objects/String
변수명.연산자
이며, 대소문자를 구분하여야 한다.관련 문서 : Mozilla MDN Web Docs, JavaScript/Reference/Global_Objects/String
- startsWith : true, false 중 하나로 반환되며 the seed에 지원되는 연산자이다.
- endsWith : true, false 중 하나로 반환되며 the seed에 지원되는 연산자이다.
- indexOf : 1부터 -1까지 (unsigned integer이거나 unsigned char이면 끝의 수인가?) 훑어보며 지원되는 연산자이다. 0번부터 시작하는 것은 기분 탓이다.
- substr(시작하는 문자열 index 번호, 문자열의 길이): 지원된다. ("조선의 궁궐에 당도한 것을 환영하오 낯선 이여" 문자열의 제8번 index에 주어진 문자열 "당"부터 시작하여 6개만.)Index0123456789101112131415161718192021222324텍스트조선의궁궐에당도한것을환영하오낯선이여
- 여기서 문자열의 길이를 0으로 해도 되지만, 빈 문자열 값으로 만들 의미가 있을까?Index0123456789101112131415161718192021222324텍스트조선의궁궐에당도한것을환영하오낯선이여
- 가져오기를 시작할 index 번호를 만약 음수로 적어놓는다면, 문자열의 길이를 넘어가지 않는 선에서 문자열의 끝에서부터 앞으로 그 만큼 간 자리의 문자부터 가지고 오게 된다. 앞의 substr(8, 6)과 비교하자면 substr(-8, 6)은 다른 값이 나올 수 있다.Index0123456789101112131415161718192021222324reversed-25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-9-8-7-6-5-4-3-2-1텍스트조선의궁궐에당도한것을환영하오낯선이여
- substring(내보내기 시작하는 문자열 index 번호, 내보내지 않기 시작하는 문자열 index 번호): 지원된다. ("순순히 금을 넘기면 유혈사태는 일어나지 않을 것입니다" 11번 ~ 15번)Index012345678910111213141516171819202122232425262728텍스트순순히금을넘기면유혈사태는일어나지않을것입니다
- 문자열의 유니코드 hex값 반환 (참고더시드포럼[8]) : 이를테면 "테스트"의 1번 index의 문자열 "스"의 유니코드 hex 값은 C2A4이다.
유니코드에 따른 문자열 목록은 윈도우즈의 경우 charmap.exe를 참고할 수 있으며[9] 또한 한국어 위키백과, 유니코드 문서에 적어놓은 표를 참고할 수 있다.변수명[index번호]식으로 돌아가는 모양이다.
char를 작은 범위의 integer로 두고 계산되는지변수명[index번호] > 숫자
같은 부등식도 잘 돌아간다.
유니코드의 경우도 마찬가지로변수명[index번호] > 0xXXXX(hex값)
같은 부등식을 넣어도 잘 돌아간다. 틀린 식을 넣으면 나오지 않는다.
- "테스트"[3]==null이 되는 예시처럼, 문자열에서 index값에 해당하는 자리가 비었을 경우, 해당 자리에 주어진 유니코드값이 없으므로 해당 자리의 값을 가져오면 null이 된다.
11. 변수값 정의 및 재정의 테스트[편집]
변수명=값
을 이용한 if 문법 테스트.11.1. 텍스트값 재정의 테스트[편집]
순서대로 정의되는 현상 [펼치기·접기]
var1="테스트" var1을 정의합니다.
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 정의합니다.
if test : 나오지 않습니다.
var=var1 : var에 var1을 지정해주었습니다
if test : 역시 나오지 않습니다.
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 똑같은 식으로 다시 정의합니다.
if test : 이제 나옵니다.
테스트
var=="테스트" : 검증
var1=="테스트" : 검증
var1="테"+"스"+"트" :
테스트
var="테"+"스"+"트"
테스트
var1="드라군" var1을 다른 값으로 정의합니다.
if test : test값은 여전히 true로 나옵니다.
테스트
var=var1 : var에 var1을 다시해주었습니다
if test : 그래도 test값은 여전히 true로 나옵니다.
테스트
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 똑같은 식으로 다시 정의합니다.
if test : 이제 나오지 않습니다.
test = (var.substr(0,1)=="드")&&(var.substr(1,1)=="라")&&(var.substr(2,1)=="군") test를 다른 식으로 정의합니다.
if test : 출력됩니다.
테스트
if true&&false : 분명히 출력이 되지 않습니다.
if test&&true
테스트
var1="테스트" var1을 원래 값(테스트)으로 정의합니다.
exam=test exam에 test를 정의합니다.
if exam : 아까 test는 식으로 저장된 것이 아니라 논리값(true or false)으로 저장되었습니다.
테스트
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 원래 식으로 정의합니다.
if test : var=="드라군" !="테"+"스"+"트"이므로 출력되지 않습니다.
if exam : exam에 true로 정의된 상태이므로 출력이 됩니다.
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 정의합니다.
if test : 나오지 않습니다.
var=var1 : var에 var1을 지정해주었습니다
if test : 역시 나오지 않습니다.
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 똑같은 식으로 다시 정의합니다.
if test : 이제 나옵니다.
테스트
var=="테스트" : 검증
var1=="테스트" : 검증
var1="테"+"스"+"트" :
테스트
var="테"+"스"+"트"
테스트
var1="드라군" var1을 다른 값으로 정의합니다.
if test : test값은 여전히 true로 나옵니다.
테스트
var=var1 : var에 var1을 다시해주었습니다
if test : 그래도 test값은 여전히 true로 나옵니다.
테스트
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 똑같은 식으로 다시 정의합니다.
if test : 이제 나오지 않습니다.
test = (var.substr(0,1)=="드")&&(var.substr(1,1)=="라")&&(var.substr(2,1)=="군") test를 다른 식으로 정의합니다.
if test : 출력됩니다.
테스트
if true&&false : 분명히 출력이 되지 않습니다.
if test&&true
테스트
var1="테스트" var1을 원래 값(테스트)으로 정의합니다.
exam=test exam에 test를 정의합니다.
if exam : 아까 test는 식으로 저장된 것이 아니라 논리값(true or false)으로 저장되었습니다.
테스트
test = (var.substr(0,1)=="테")&&(var.substr(1,1)=="스")&&(var.substr(2,1)=="트") test를 원래 식으로 정의합니다.
if test : var=="드라군" !="테"+"스"+"트"이므로 출력되지 않습니다.
if exam : exam에 true로 정의된 상태이므로 출력이 됩니다.
"인장 주작은 뭐야, 프 라 나"[10]
- "너희들은 싹다 개추다"
(combination2=="과징금크아악X이빨"의 일부 문자열에 해당하는 이름과 같은 변수(combination1)의 값을 'Chang-seop' 변수의 값으로 재정의)
"과징금 크아악 X이빨"
"바로 리부트 정상화"
결론 : 변수를 새로 정의한다면 "식"이 아니라 그 전에 정의되어 있는 변수값을 식에 대입하고 "계산한 값"을 정의하게 되므로, procedure가 아닌 이상 모종의 함수(function)를 정의해야 할 필요가 있다.
결론2 : include 문법의 괄호 안에 문서명 다음으로 뒤에 넣는 식은 변수값 정의이다.
11.2. 반점(,) true, false 중첩 테스트[편집]
여러 값을 부여하는 목적이 아니고 논리식을 열거하면 마지막이 true일 때 출력된다.앞의 값이 모조리 true라도 마지막이 false이면 출력되지 않으며, 앞의 값이 모두 false이더라도 마지막이 true이면 출력된다. 논리식을 열거하더라도 도중에 변수에 값을 주는 식을 섞었다면 변수에 값이 주어지며, 그렇게 정의된 변수들은 모두 이용할 수 있다.
당연히 지원되지 않는 변수값으로 정의하면 문법이 깨진다.
당연히 지원되지 않는 변수값으로 정의하면 문법이 깨진다.
11.3. 숫자값 재정의 테스트[편집]
a=3 으로, b=3.0으로 주었을 때 a, b의 값은 같아야 한다. 그러나 두 수가 명목상으로는 서로 값이 같지만 a는 integer이고 b는 float 형식으로 다른 형식의 값으로 인식하는지 a!=b로 나온다. a에 0.0을 첨가해서 a를 float으로 만들면 비로소 a와 b는 같다고 나온다. 뭐야 이거라고 말할 수는 있다. a는 3인데 0.0을 먹여서 3.0을 만들었으므로 3을 3이라 부르지 못해서 서러워할 수 있다. 다시 a를 a=3이라고 integer값으로 재정의해야 비로소 a==3을 넣었을 때 true가 된다. 이해가 안 가겠거든 이 문단의 RAW를 보자. 마찬가지로 b는 아직도 float이므로 b==3.0인데 b==3으로 넣으면 false가 된다. 물론 b의 곶 integer b==3로 만들 수 있다.
응용만 잘한다면 아무 long 값을 가져와도 소수점 아래를 잘라서 정수로 만들 수 있지 않을까?
그리고, ASCII 코드값을 16진법 주소값으로 바꿀 수는 있다. 주소값을 값으로 가지는 변수는 주소값으로 대응할 수 있는데 integer로도 가능하며 유니코드 16진법 값도 잘만 맞추면 integer로 대응할 수 있다. 이것으로 보자면 integer를 모종의 주소값으로 취급하는 것으로 보인다.
3.0에서 아래쪽(에 해당하는 .0)을 잘라서 응용만 잘한다면 아무 long 값을 가져와도 소수점 아래를 잘라서 정수로 만들 수 있지 않을까?
그리고, ASCII 코드값을 16진법 주소값으로 바꿀 수는 있다. 주소값을 값으로 가지는 변수는 주소값으로 대응할 수 있는데 integer로도 가능하며 유니코드 16진법 값도 잘만 맞추면 integer로 대응할 수 있다. 이것으로 보자면 integer를 모종의 주소값으로 취급하는 것으로 보인다.
11.4. 문단을 초월하는 변수값 정의[편집]
문서 전체 raw를 보았으면 알겠지만, 이 문단 이전에 정의된 변수가 이미 있는 상황에서 다음 문단 안에서 문단 편집을 하게 된다면 문단 편집 안에서 미리 보기를 한 것과 저장하고 나오는 결과가 다를 수 있다. 저장할 경우 앞의 문단에서 이미 정의된 변수값이 있으먼 문단 문법을 넘어 문서 끝까지 영향을 준다.
11.5. 변수 값 변화 주기 (증가, 감소)[편집]
판별식에서 +를 입력하다가 잘못하여 +기호를 두 번 써서 판별식에서 +를 입력하다가 잘못하여 +기호를 두 번 써서 판별식 안에서 변수 뒤에 ++를 써서
변수가 텍스트 값이어도 변수에 주어진 기본값이 0이므로 텍스트로 정의된 변수 앞에 ++를 걸면 1로 인식된다. 논리값도 되는데 false 기본값은 0이므로 false로 정의된 변수 앞에 ++를 걸면 1으로 인식되며 true의 기본값은 1이므로 true로 정의된 변수 앞에 ++를 붙이면 2로 인식된다.
당연히 ++변수가 아닌 ++숫자 식, ++논리값, ++텍스트 등은 안 통한다.
텍스트값의 경우 기본값이 0이므로
-+로 하면
++변수=값 같이 비교가 아닌, 변수값 정의에 증가 또는 감소 구문이 들어가면 if 구문 자체가 깨져 먹히지 않는다.
결론 :
++변수
로 되면 변수에 1을 증가한 값으로 인식된다. ++변수
로 되면 변수에 1을 증가한 값으로 인식된다.변수++
로 쓰면 해당 판별식을 정상적으로 거치고 나서 변수의 값이 1 증가한다. (자동적으로 변수+=1
이 걸린다.) 변수가 텍스트 값이어도 변수에 주어진 기본값이 0이므로 텍스트로 정의된 변수 앞에 ++를 걸면 1로 인식된다. 논리값도 되는데 false 기본값은 0이므로 false로 정의된 변수 앞에 ++를 걸면 1으로 인식되며 true의 기본값은 1이므로 true로 정의된 변수 앞에 ++를 붙이면 2로 인식된다.
당연히 ++변수가 아닌 ++숫자 식, ++논리값, ++텍스트 등은 안 통한다.
변수++
는 판별식에서 true가 되었든 false가 되었든 한 번 쓸 때마다 1씩 증가한다. ++변수
도 마찬가지로 if문 조건식에 여러 번 쓰게 되면 쓴 만큼 증가한다.변수--
방식도 지원된다. 텍스트값의 경우 기본값이 0이므로
변수--
를 걸면 값이 -1으로 된다.-+로 하면
-+변수
식(덧셈의 역원)으로 읽히는지 음수가 된다. ++변수=값 같이 비교가 아닌, 변수값 정의에 증가 또는 감소 구문이 들어가면 if 구문 자체가 깨져 먹히지 않는다.
결론 :
- ++변수 : 선 증가 후 비교
- 변수++ : 선 비교 후 증가
- 변수-- : 선 비교 후 감소
- -+변수 : 증감이 아니라 덧셈의 역원(을 더하는) 연산으로 읽힌다.
11.6. and(&&) 와 or(||)를 이용한 변수값 정의[편집]
변수가 성공적으로 정의된다면 논리값 true가 숨어드는 모양이다. 그래서 변수에 값을 주는 부분에 논리 연산을 결합시킬 수 있고 만일 false가 되면 값이 주어지지 않는다.
논리식과 변수 정의식을 섞어 쓰면같이 if 논리식을 하나 만들고 그 안에 if 변수 정의식을 적는 수고를 줄일 수 있다. 간단히 처럼 나타낼 수 있게 된다. 응용한다면 반점처럼 나타낼 수 있게 된다.
논리식||변수 정의식 처럼 만들었다면 신경을 써야 할 수 있다. 왼쪽 논리식이 false여도 정의식은 true처럼 인식되므로 값이 새로 주어질 수 있다. 해당 문단의 원문(RAW)을 참고.
논리식과 변수 정의식을 섞어 쓰면
{{{#!if 논리식(조건부)
{{{#!if 변수 정의식(실행부)
}}}}}}
{{{#!if 논리식(조건부)&&변수 정의식(실행부)
}}}
,을 적어 {{{#!if 논리식1&&변수 정의식1 , 논리식2&&변수 정의식2 , 논리식3&&변수 정의식3, ...
}}}
논리식||변수 정의식 처럼 만들었다면 신경을 써야 할 수 있다. 왼쪽 논리식이 false여도 정의식은 true처럼 인식되므로 값이 새로 주어질 수 있다. 해당 문단의 원문(RAW)을 참고.
11.7. null 병합 연산자 ??[편집]
??
연산은 왼쪽 값이 null일 경우 오른쪽 값을 선택하고, 왼쪽이 null이 아니면 왼쪽을 그대로 선택하는 조건부 연산이다. ??
연산자가 !=
연산자와 충돌된다면 괄호를 잘 묶어주어야 한다. 이를테면 연산자의 왼쪽을 0으로 적게 되면 null이 아니므로 왼쪽 것이 선택된다. 만일
??
연산자가 아니라 ||
(OR) 연산자이면 0이 false이므로 오른쪽이 선택된다. 아주 가끔 ||
연산자를 섞으면서 두 가지 이상의 변수를 다룰 때 쓸만하다.12. 다른 링크, 틀 출력 테스트[편집]
출력이 되지 않는 틀은 역링크를 조회해보면 include로 역링크가 걸리지 않는다.
If true 분류:나무마크 문법 |
If false 분류:위키 |
출력이 되지 않는 분류로는 해당 문서가 포함되지 않는다.
If true ##@ |
If false ##@ |
##@ 테스트. If 문구 사이에 ##@를 끼워넣어도 편집창 상단 표시에 출력되어 나온다.
##@If true |
##@If false |
단, ##@ 로 표시되는 공간에 If 구문이 걸리면 true일 때만 출력된다.
변수값 정의는 고정 주석 문법을 입력하는 공간을 넘나들 수 있는가?
{{{#!if exhibition1 = 1 (변수값 정의) ##@{{{#!if exhibition1 == "1" (판별식) ##@}}} (exhibition1 변수값 정의.) |
##@{{{#!if exhibition2 = 2 (변수값 정의) ##@}}} {{{#!if exhibition2 == "2" (판별식) ##@{{{#!if exhibition2 == "2" (판별식) exhibition2 은 여기서 null로 나온다. |
##@{{{#!if exhibition3 == "3" (판별식) ##@}}} {{{#!if exhibition3 = 3 (변수값 정의) (exhibition3 변수값 정의.) |
{{{#!if exhibition4 = 4 (변수값 정의) ##@{{{#!if exhibition4 == null (판별식) ##@}}} (exhibition4 변수값 정의.) |
{{{#!if exhibition5 = 5 (변수값 정의) ##@{{{#!if exhibition5 = 2, exhibition5 == "2"(판별식) ##@}}} (exhibition5 변수값을 5로 정의.)5인지 테스트. 그런데 고정 주석 출력 공간 안에서 "2"로 정의해도 여기에는 '2'가 아닌지 테스트.'5'인지 테스트. |
결론1 : 출력되지 않는 점을 이용하면 ##주석 못지 않게 활용할 수 있을 듯하다.
결론2 : 같은 문서 안에서 고정 주석을 출력하는 공간 안과 밖에서 변수는 같은 이름의 변수라 하더라도 별개의 값으로 정의된다. 안에서 정의된 값이 바깥에 영향을 주지 않고 바깥에서 정의된 값이 안에 영향을 주지 않는다.
13. 리스트(List) 변수 테스트[편집]
this.var2_1를 "으아니"로 정의해본다.
this.var2_2=var2_1+var2_1로 정의했을 때 var2_2이 텍스트의 합도 된다.
가령 f={a:(x*x)+3*x, b:1}로 정의해놓고 x=4로 정의하게 되면 f['a']는 정의되지 않아도 f['b']==1이다. 만약에 g=f 로 두면 g==f이고 g['b']==1이지만 g!={a:(x*x)+3*x, b:1}이다. 먼저 정의된 값을 따라가지 x가 바뀐다고 해서 list안의 값이 같이 바뀌지는 않는다. 수동으로 다시 정의해줘야 하며, 만약 이 때 x값이 먼저 정의된 상황에서 f={a:(x*x)+3*x, b:1}로 다시 정의하면 f['a']==28 이며, x=5로 바꾼다고 해서 f['a']의 값이 40으로 되지는 않는다.
여기까지 보았을 때 값이 f['a']==28, f['b']==1이다. 앞에 그냥 a, b는 f[a]==28이 false가 되는 점에서 f={a:(x*x)+3*x,b:1}으로 정의할 때 변수의 index 이름이 텍스트값으로 바뀐 모양이다. 이때 g=f로 다시 두면 당연히 g['a']==28, g['b']==1이 되는데 g=g.toString()을 걸면 g는 15자리 문자열로 바뀌며 [object Object]로만 바뀐다.오구작 오구작 (g=f로 다시 두고,) g['a']=g['a'].toString() 같은 것을 해야 g['a']=="28"이 된다.
신기하게 g=f로 다시 두면 g['a']==28, g['b']==1이 되지 않는다. something went wrong? f를 건드리지 않았음에도 f['a']==28이 아니다. f를 건드리지 않았음에도 f['a']=="28"이 되어 있다. 그렇게 되면 앞에서 g=f로 다시 정의했으므로 당연히 g['a']=="28"이다. f['a']=+(f['a']+"0")으로 두면 +"280"이므로 280일 터인데 신기하게 g를 건드리지 않았는데도 g['a']=280이 되어 있다. List로 정의한 변수로 정의하면 모종의 주소값이 주어지고 그 안의 값이 공유되는 모양이다.
다른 변수 h에 a, b를 다른 값으로 주어 h={a:180, b:2}으로 새로운 List를 정의하면 h['a']==180 값은 f['a']의 값에 영향을 주지 않는다. 여전히 f['a']==280이다.
h['a']=h['a']+f['a']로 주면 h['a']==460 이며 (280+180==460) g['a']에서 100을 뺀다면 f['a']==180이지만 h['a']는 360이 아니라 여전히 460이다. 물론 i=h으로 두고 i['a']에서 100을 빼면 h['a']는 360이 된다. i['b']의 값은 그대로이다.
이제 여기서 i=i-10으로 10을 빼면 어떻게 될까. h['a'] 값은 360에서 10을 뺀 350으로 되지는 않는다. i['a']는 바뀌었는데 360-10은 아니다. i==-10으로는 나온다. 숫자가 아닌 문자열 값은 0으로 나오겠지만 문자열 값에서 숫자를 빼게 되면 뺀 값으로는 된다. i['a']가 0은 아닌 무언가인데, 따지고 보면 List로 정의한 값이 지워진다. 있었는데 없어진 모양새로 보아서는 리스트에 숫자로 빼면 숫자값으로 바뀌는 모양이다.
(i=h로 두게 되면 i['b']==2가 된다.) g['a']==180이고 g['b']==1이라서 벡터의 합처럼 {와 }로 만든 g+i 같은 것이 정의될까 싶었지만 그렇지는 않다. [와 ]로 만든 리스트도 마찬가지이다.
this.var2_2=var2_1+var2_1로 정의했을 때 var2_2이 텍스트의 합도 된다.
가령 f={a:(x*x)+3*x, b:1}로 정의해놓고 x=4로 정의하게 되면 f['a']는 정의되지 않아도 f['b']==1이다. 만약에 g=f 로 두면 g==f이고 g['b']==1이지만 g!={a:(x*x)+3*x, b:1}이다. 먼저 정의된 값을 따라가지 x가 바뀐다고 해서 list안의 값이 같이 바뀌지는 않는다. 수동으로 다시 정의해줘야 하며, 만약 이 때 x값이 먼저 정의된 상황에서 f={a:(x*x)+3*x, b:1}로 다시 정의하면 f['a']==28 이며, x=5로 바꾼다고 해서 f['a']의 값이 40으로 되지는 않는다.
여기까지 보았을 때 값이 f['a']==28, f['b']==1이다. 앞에 그냥 a, b는 f[a]==28이 false가 되는 점에서 f={a:(x*x)+3*x,b:1}으로 정의할 때 변수의 index 이름이 텍스트값으로 바뀐 모양이다. 이때 g=f로 다시 두면 당연히 g['a']==28, g['b']==1이 되는데 g=g.toString()을 걸면 g는 15자리 문자열로 바뀌며 [object Object]로만 바뀐다.
다른 변수 h에 a, b를 다른 값으로 주어 h={a:180, b:2}으로 새로운 List를 정의하면 h['a']==180 값은 f['a']의 값에 영향을 주지 않는다. 여전히 f['a']==280이다.
h['a']=h['a']+f['a']로 주면 h['a']==460 이며 (280+180==460) g['a']에서 100을 뺀다면 f['a']==180이지만 h['a']는 360이 아니라 여전히 460이다. 물론 i=h으로 두고 i['a']에서 100을 빼면 h['a']는 360이 된다. i['b']의 값은 그대로이다.
이제 여기서 i=i-10으로 10을 빼면 어떻게 될까. h['a'] 값은 360에서 10을 뺀 350으로 되지는 않는다. i['a']는 바뀌었는데 360-10은 아니다. i==-10으로는 나온다. 숫자가 아닌 문자열 값은 0으로 나오겠지만 문자열 값에서 숫자를 빼게 되면 뺀 값으로는 된다. i['a']가 0은 아닌 무언가인데, 따지고 보면 List로 정의한 값이 지워진다. 있었는데 없어진 모양새로 보아서는 리스트에 숫자로 빼면 숫자값으로 바뀌는 모양이다.
(i=h로 두게 되면 i['b']==2가 된다.) g['a']==180이고 g['b']==1이라서 벡터의 합처럼 {와 }로 만든 g+i 같은 것이 정의될까 싶었지만 그렇지는 않다. [와 ]로 만든 리스트도 마찬가지이다.
14. 변수값 형식 동치 테스트[편집]
가령 a에 5(정수값), b에 5.0(실수값)을 정의하면 a와 b의 값은 같으나 형식이 서로 달라서 다른 값으로 인식된다. 엄밀히 보자면
the seed에는 ===, !== 구문이 지원되지 않는다.
!=이 아니라 (=이 하나 더 들어간) !==을 써야 하지 않겠는가 싶지만 아무래도 the seed엔진에서 ==이 값의 형식까지 일치해야 같은 것이라고 인식하는 부분이므로 넘어가자? JavaScript 정도로 가면 ==은 true이나 ===은 false로 나올 것이다.the seed에는 ===, !== 구문이 지원되지 않는다.
15. 프로그래밍 정수값[편집]
15.1. 16진법(0x~) 테스트[편집]
"T"[0]==0x54로 두듯이 정수 가운데 0 이상 65535이하의 정수는 16진법과 같은 것으로 취급한다. 5자리 이상은 안 되길래 0x1234 식의 4자리까지만 되는가 싶었는데 언제 잠수함 패치를 때려서 16진법 8자리도 된다. 더 테스트 해봐야 되겠지만 18,446,744,073,709,551,615(1616-1 == 0xffffffffffffffff)의 unsigned long integer 까지만 지원되는 모양이다. 8자리에서 덧셈 연산과 곱셈 연산은 지원되고 이 이상도 지원된다. 그러나 15자리를 넘어 16자리 연산은 signed long integer 문제 때문인지 문법이 깨질 수 있다. signed long integer의 한계 안에서만 연산을 할 수 있는 모양이다.
15.2. 8진법(0o~), 2진법(0b~)[편집]
0x로 시작하는 16진법(hexadecimal)만이 아니라 0o로 시작하는 8진법(octal)도 지원된다. 대문자를 쓰는 0O로도 8진법 표기가 가능하다. (0O37+0O43==0O102)
0b로 시작하는 2진법(binary)도 지원된다. 대문자로 쓴 0B도 가능하다.
2진수, 8진수 16진수 값으로 변수를 정의하면 매개변수 기호 @을 이용하여 출력할 때 10진수 정수값이 나온다. 이를테면 a=0b1101011, b=0o32274, c=0x14fa으로 정의할 때 a, b, c는 각각 107, 13500, 5370로 나온다.
당연하겠지만 각 진법에서 표기할 수 없는 수를 적으면 문법이 깨진다.
parseInt 함수는 2와 8, 10, 16 정도만 안다. 프로그래밍에서 2, 8, 10, 16진법을 주로 다루니 parseInt는 그정도만 지원되는 모양이다.
0x00 외 다른 알파벳도 가능하지 않을까 궁금할 수 있겠지만, 직접 해 보면delivery box라는 단어 하나 만들 정도가 전부이다. (본 문단의 RAW 참고)
결론 : b, o, x가 프로그래밍 진법으로 지원된다.
0b로 시작하는 2진법(binary)도 지원된다. 대문자로 쓴 0B도 가능하다.
2진수, 8진수 16진수 값으로 변수를 정의하면 매개변수 기호 @을 이용하여 출력할 때 10진수 정수값이 나온다. 이를테면 a=0b1101011, b=0o32274, c=0x14fa으로 정의할 때 a, b, c는 각각 107, 13500, 5370로 나온다.
당연하겠지만 각 진법에서 표기할 수 없는 수를 적으면 문법이 깨진다.
0x00 외 다른 알파벳도 가능하지 않을까 궁금할 수 있겠지만, 직접 해 보면
결론 : b, o, x가 프로그래밍 진법으로 지원된다.
16. table if (if > print)[편집]
table에 지원되는 if 문법은 표로 된 행(row)와 열(data, column) 중 행(row)을 출력하느냐 마느냐를 결정하는 rowif가 있다. 곧 <(if 명령문)=(변수 또는 논리식)> 모양으로 넣는다. |
a에 값 1을 부여하고 <rowif=this.a>를 준다면 해당 행이 출력된다. 반면 this.b=0을 주고 <rowif=this.b>를 주면 출력되지 않는다. (해당 문단의 RAW 참고) |
논리값을 rowif로 가져올 때 true는 출력되고 false는 출력되지 않는다. |
rowif에 적당한 등호를 적어놓고 괄호 처리를 해도 rowif가 동작이 됨을 볼 수 있다. |
테이블 구문에서 속성을 부여하는 괄호인 <, > 기호를 먼저 읽기 때문인지 부등식은 나타내기 어렵다. |
등호만 잘 적어 맞춘다면 텍스트 변수와 그 매서드(method, 보조 함수)를 가져와도 동작되는 현상을 볼 수 있다. |
프로그래밍 변수를 가져와도 별 문제 없이 동작된다. |
숫자가 아닌 텍스트는 정수값 0이 주어지나 논리값으로 텍스트&&true를 연산하면 true가 되므로 rowif를 걸면 행이 나온다. 반면 null은 false는 아니지만 true도 되지 않는 별개의 상태이므로 rowif에 null은 출력되지 않는다. |
결론 : rowif는 <rowif=(true로 나오는 값)>일 때 해당 행이 출력된다. 단, 부등호는 구문 컴파일 문제가 있는지 잘 되지 않는다.
17. 메모[편집]
- If 조건문에 함수를 넣을 수 있을까?
예 : dday를 넣어서 누구누구 운영자가 재직 며칠이 되었음을 적을 수 있음, pagecount를 넣어서 이 문서 개수가 몇 개를 돌파했음을 알릴 수 있음, 대문 기념일 틀을 기념일 되기 한참 전에 미리 만들어놓고 if를 걸어놓을 수 있음, 나무위키 공지 틀(고정 주석 문법)에 if를 걸어놓을 수 있음.
- 틀의 매개변수명에 관하여
펼치기, 접기
안내 : 테스트 필요.
- 매개변수에 입력하면 텍스트가 출력되거나 출력되지 않는 wiki style 구문 전부를 if 구문으로 변환한다. 가령#!wiki style="display:inline; display:@구버전 매개변수명@=none"이 있으면#!if @구버전 매개변수명@!=null으로 바꾼다.
- 신버전과 나란히 입력한다.
예 : {{{#!if (구버전 매개변수명!=null)^(신버전 매개변수명!=null)
@구버전 매개변수명@@신버전 매개변수명@}}}
- 신버전 매개변수명을 입력해도 틀이 동작된다.
- elseif, else (관련 : #더시드포럼)
- 발전 가능성
if 가 나왔으니 while, for 등 루프 연산, 그리고 더 나아가서 변수값 재지정[13], break, continue 등 구문이 나올 수 있어 보인다. 그렇게 나오게 되면 문서는 하나의 스크립트가 될 수 있다. 루프(loop) 연산이 나오게 되면 include 과부하 요청 같이 무한히 지속되는 연산 요청을 내지 않도록 시스템에서 의도적으로 루프를 몇 번까지만 반복할 수 있도록 제한을 걸어둘 것으로 보인다.
18. 결론[편집]
{{{#!if (논리식) (논리식이 true이면 출력할 내용)}}} |
{{{#!if (변수 정의(define) 식) (성공적으로 정의되었을 때 출력할 내용)}}} |
조건문에 지원되는 기능 : true, false, null, this 등등 |
추정되는 문법 |
If구문은 고장난 구문(문법)은 아니지만, 잠수함 패치로 인해 변수를 연결할 수 있는 입력방법을 찾아야 한다. 조건부에 텍스트값, 정수 숫자값, 실수 숫자값, 논리값(true 또는 false)은 지원되는 입력으로 보인다. 연산할 값의 종류와 연산하여 나오는 값의 종류에 알맞은 기호만 쓴다면 원하는 설계에서 크게 벗어나지 않게 이용할 수 있다.
[1] 다만 아카라이브 채널위키에는 구현되어 있지 않아서 #!if까지 문구로 나온다.[2] 후술할 비트 연산자 중 하나이다.[3] 지수가 아니라 프로그래밍 전용 연산[4]
사실 이지만 이 식에서는 오른쪽 수는 0 이상의 정수 가운데서 식을 만족하는 가장 작은 값을 생각한다.
물론 다음도 출력된다.
if 18%7=32%7
출력 (18%7=32%7)
여기서 %를 적어놓지 않으면 출력되지 않는다.
예 : 5**2=11 로만 적어놓으면 출력되지 않는다.
[5] 단, 기호가 들어가지 않을 것[6] 오일러 등식[7] 계산값 자체를 출력하는 방법이 아직까지는 발견되지 않은 상황에서, 두 수의 사칙연산을 계산하여 나오는 값을 자리 단위로 끊어 출력해주는 틀이다. 2025년 8월 경 방법이 생겨 현재는 더 간단해진 버전이 존재한다.[8] "H"의 char 값은 72이며 ASCII Code에 따른 값이다. unsigned char에 따른 확장은 잘 되지 않는다.[9] 몇 글꼴은 일부 유니코드가 나타나지 않으므로 흔하게 쓰는 글꼴로 두고 열람해야 한다. 물론 다음도 출력된다.
if 18%7=32%7
출력 (18%7=32%7)
여기서 %를 적어놓지 않으면 출력되지 않는다.
예 : 5**2=11 로만 적어놓으면 출력되지 않는다.
함초롱바탕
같이 유니코드 명령어 연산자를 제외하고 0x0000(U+0000)부터 0xffff(U+FFFF)까지 거의 모든 유니코드 문자를 볼 수 있는 글꼴이 존재한다.[10] raw 참조[11] 서버 시간과 시간대가 달라도 1일 전~1일 후 사이에는 기념일에 맞게 된다.[12] 평상시 환영 문구. "○○위키에 오신 것을 환영합니다."[13] 테스트 해본 결과 가능하다. 언제 업데이트 되었는지 모르겠지만.