AutoHotKey를 사용하는 사람들
오늘: 217
어제: 481
전체: 198,356
회원: 1,865
접속: 25 (회원 3)

AutoHotKey 회원강좌

 

AutoHotkey에 대해 회원들이 직접 작성한 강좌를 올리는 곳입니다. 자신만의 팁을 공유해 주세요. ^^

 
작성일 : 10-05-18 18:59
IF 사용시 오류나시는분들 보셔요
 글쓴이 : 운장Lv.17
조회 : 770   추천 : 2   비추천 : 0  

IF사용시 예전에는 제대로 안될때가 있어 %붙여보고 소괄호붙여보고..이래저래 헷갈렸었는데
쓰다보니 오토핫키상 오류는 원래 없었던듯 싶습니다.

여러가지 IF의 사용법에 대해 써보겠습니다.



1. 변수와 문자열,숫자 한개비교

변수=문자열
if 변수=문자열
     msgbox ok
else
     msgbox fail

=>ok출력

변수=3
if 변수=3
     msgbox ok
else
     msgbox fail

=>ok출력

하나의 변수에 대해선 문자열이든 숫자든 그냥 비교하시면됩니다.



2. 변수와 변수비교

변수1=4
변수2=4
if 변수1=변수2
     msgbox ok
else
     msgbox fail

=>fail출력

이렇게 하면 안됩니다.
두가지 방법이 있습니다.

변수1=4
변수2=4
if 변수1=%변수2%
     msgbox ok
else
     msgbox fail
=>ok출력

변수1=4
변수2=4
if (변수1=변수2)
     msgbox ok
else
     msgbox fail
=>ok출력

여기서보면 유추할수있듯이, %%로 묶어주면 변수로 취급됩니다.
그리고 ()소괄호로 묶어주면 안에있는 문자열은 변수로 취급됩니다.

그렇다면 한가지 둘다 %%로묶어주면 어떨까요?
변수1=4
변수2=4
if %변수1%=%변수2%
     msgbox ok
else
     msgbox fail
=>fail출력

안됩니다. 여기서보면 첫번째써진 문자열은 변수로 자동취급됨을 알수있습니다.
그렇다면, 소괄호로 묶인상태에서 문자열 비교는 어떻게할까요?



3. 소괄호 내의 변수와 문자열비교

변수=문자열
if (변수="문자열")
     msgbox ok
else
     msgbox fail
=>ok출력
간단합니다. ""로 묶어주면됩니다.



4. 두개 이상의 조건비교

변수1=4
변수2=5
변수3=6
if 변수1=4 and 변수2=5 and 변수3=6
     msgbox ok
else
     msgbox fail
=>fail출력

변수1=4
변수2=5
변수3=6
if (변수1=4 and 변수2=5 and 변수3=6)
     msgbox ok
else
     msgbox fail
=>ok출력

변수1=4
변수2=5
변수3=6
if (변수1=4) and 변수2=5 and 변수3=6
     msgbox ok
else
     msgbox fail
=>ok출력

fail의 원인을 보자면, =과 and연산자 사이의 연산우선순위에 있는듯합니다. = 대신 다른 비교문으로 실행하면 정상적으로 진행이 가능했습니다.

변수1=4
변수2=5
if 변수1<=5 and 변수2<=5
     msgbox ok
else
     msgbox fail
=>ok출력

변수1=4
변수2=5
변수3=6
if 변수1<=4 and 변수2<=7 and 변수3=7
     msgbox ok
else
     msgbox fail
=>ok출력(원래는 fail이 되야함 변수3은6이므로)

변수1=4
변수2=5
변수3=6
if (변수1<=4) and 변수2<=7 and 변수3=7
     msgbox ok
else
     msgbox fail
=>fail출력
이렇게 해야지 정상적으로 출력되었습니다.
여기서 소괄호 영역은 변수1까지든 변수2까지든 변수3까지 전체든 상관없습니다.

이렇게보니 여러개 비교할땐, 정확히 소괄호를 사용해주는게 편리할것같습니다.
물론 소괄호 영역에서 문자열 비교는 ""사용하는것 까먹으면 안되겠죠 ^^



5. 변수만 비교

변수=0
if 변수
     msgbox ok
else
     msgbox fail
=>fail출력

변수=
if 변수
     msgbox ok
else
     msgbox fail
=>fail출력

변수가 0이거나 비어있는경우를 제외하곤 무조건 성공합니다.
그러므로 흔히 내장변수로 제공되는 errorlevel은 특별한경우가 아니면
if errorlevel처럼 간단히 써도 무방합니다.



6. 함수를 if문에서 활용하기
개인이 만든 함수로 참거짓을 판단해야할 경우가 있습니다.
그럴때도 if문에서 사용이 가능합니다.

변수=3
if 결과:=자연수판단(변수)   ;자연수판단 함수에 변수값 3을 넣고 결과변수에 그값을 반환받습니다.
     msgbox ok
else
     msgbox fail
msgbox % 결과  ;여기서 1출력
=>ok출력(결과는 1출력)

변수2=-1
if 결과:=자연수판단(변수2)
     msgbox ok
else
     msgbox fail
msgbox % 결과
=>fail출력(결과는 0출력)

자연수판단(변수)
{
     if 변수>0
          return 1
     else
          return 0
}

위에서 보시다싶이 함수로 반환받는 값을 바로 저장하면서 참거짓 여부를 판단할수 있습니다.




*** 이외의 또다른 특이한 경우있으면 모두 공유할수있도록 댓글부탁드려요 ^^

비추천 : 0
추천 : 2
^^

       eocndLv.13 / 2010-05-18 20:58

a=1
if (e=3 || a=1 || b=2)
msgbox, ro
return
e=3
a=1
b=2
if (e=3 && a=1 && b=2)
msgbox, ro
return

&&는 And의 의미로 모두 참일떄 값을 참으로 반환하고
하나라도 거짓이면 거짓으로반환합니다.

||는 OR의 의미로 모두거짓일때 거짓을 반환하고
하나라도 참이면 참을반환합니다.

--------------------------------------------------------------------------------------

좋은정보 항상감사하게생각하고있습니당. ㅎ
운장님 감사합니다!

       현수Lv.10 / 2010-05-19 22:40

깔끔한 정리.. 변수에 대해서 다시금 복습합니다

       sch77Lv.1 / 2010-05-21 18:47

헷갈리는 부분인데 자세한 설명 감사 드립니다

       광팔aLv.3 / 2010-05-30 15:14

머리에 쏙쏙 들어오네용 ㅋㅋ

       스타일Lv.3 / 2010-07-04 13:38

저같은 경우엔 루프문 안에서 하나의 변수에 문자열을 순서대로 집어넣은뒤에 더이상 값이 있는지 없는지 판별하기위해서

if ( 문자열변수 == "" )  ;; 문자열이 비워져 있으면... 이라는 의미.
  break

와 같은 if문으로 더이상 받아올 문자열이 없으면 루프문을 종료시키는 제어문을 많이 쓰게 되더라구요..


추가로, 위에 설명이 없던 부분이 있어서;; 덧붙입니다.

if 문안에 실행문이 여러줄일경우에 { } 로 묶어야 모두 실행 가능합니다; 다들 아시겠죠;;

if (조건)
{
  실행문 1
  실행문 2
}else{ ;; 위에 조건이 아니라면
  실행문 3
  실행문 4
}

       현수Lv.10 / 2010-07-15 13:49

오늘 공부하닥 우연히 발견했네요. Ternary operator
예) var := x>y ? 2 : 3

변수 세 개를 비교한 후에 값을 저장하는 건데요, 이걸 써보니까 스크립트 내용을 상당히 줄일 수 있더라구요 ^^
(This can improve a script's readability and maintainability)


 
 

 
Total 50
번호 제   목 글쓴이 날짜 조회 추천 비추천
[내장변수모음] 함께 만들어가는 내장변수 모음집 (9) 관리자Lv.100 11-20 3070 0 0
50 처음오신분을 위한 강좌요. (5) eocndLv.13 08-09 1073 2 9
49 Fn 키를 레지스트리나 오토핫키로 remapping하는 게 안 되는 이유 (3) 한빈Lv.2 08-06 312 3 0
48 쉬프트 키 오류 해결방법입니다. (2) 가나다마Lv.1 08-05 290 0 0
47 무료 아이콘 사이트 (6) 여유Lv.20 05-30 861 2 0
46 오토핫키 함수(Function)에 대한 팁 (7) 운장Lv.17 05-24 1668 5 0
45 [동영상] 초보입문 - 초간단 Imagesearch 활용 (11) 베르바Lv.13 05-20 1657 3 0
44    [동영상] 초보입문 - 초간단 Imagesearch 활용(Full 파일복구) (6) 베르바Lv.13 08-10 479 3 0
43 IF 사용시 오류나시는분들 보셔요 (6) 운장Lv.17 05-18 771 2 0
42 서브루틴을 자유자재로 다뤄보자! (6) eocndLv.13 05-17 739 0 9
41 Loop에 관한 마구잡이 팁... (7) 운장Lv.17 05-15 1179 1 0
40 GUI 를 이용한 변수 강좌. (if도 강좌) (3) 강쥐Lv.8 05-01 975 0 0
39 랜덤으로 .. 구이의 픽쳐를 바꾸는강좌. {동영상} (6) eocndLv.13 03-24 895 3 0
38 [AHK 도움말] 한글 번역판 (7) 베르바Lv.13 03-22 1549 1 0
37 [동영상] 초보입문 - Gui 만들기, Edit 창 활용 (12) 베르바Lv.13 03-22 1607 5 0
36    [동영상] 초보입문 - Gui 만들기, Edit 창 활용(파일복구) 베르바Lv.13 08-10 253 1 0
 
 
 1  2  3  4  

 

Copyright Tleap. All rights reserved.