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

AutoHotKey 회원강좌

 

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

 
작성일 : 10-05-17 21:54
서브루틴을 자유자재로 다뤄보자!
 글쓴이 : eocndLv.13
조회 : 738   추천 : 0   비추천 : 9  

Q. 서브루틴이 뭘까?

A. 순서대로 시행될 스크립트와 개별적인 특수적인 스크립트 (핫키에 의해 시행되지않는다)

Example ;

Gui, add, button
gui, show, w100 h100
return

Guiclose:
exitapp

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

저게 도데체 무어란말인가?
분명 스크립트를 틀면 순서대로 시행될것이고 결국 return에의해 끝날것이다.
시행되지도 않을 exitapp라는 명령어는 무엇이고 왜 guiclose:라는 말을 중간에 써줬을까?
핫키는 ::로 표기한다.
그러므로 저것은 문법에 어긋날것이다.
한번 스크립트를 복사해서 새스크립트를 작성해보자.
잘 실행되는가?
그럼 구이창의 X자를 눌러보자.

스크립트가 꺼졌는가?
바로 이것이다.
guiclose 라는 서브루틴이 마치 패시브스킬처럼 구이를 닫는이벤트를 알아채고 이하 스크립트를 실행시켜주는것이다.
X자를 눌러도 끄고싶지않다면
return이라는 명령어를 exitapp대신에 넣으면될것이다.

대충 감이오는가?

예제를 하나더 살펴보자.

Guiclose:
exitapp

Gui, add, button
gui, show, w100 h100
return

위스크립트를 실행시켜보자.
잘실행됬다면 또한번 X자를 눌러보자. 스크립트가 잘꺼지는가?
잘된다는 몇몇은 실행해보지 않은것일것이다.
사실 위스크립트는 문법상 어긋나지 않고 처음예제와 동일하지만 효과는 상반되게 나타난다.
이는 서브루틴이 이하 스크립트를 감싸지못한다는것을 모른채 가장많이 저지르는 실수이다.

스크립트는 순서대로 시행되고 exitapp를 만남과동시에 사라질것이다.
기억하자.
서브루틴은 처음에 나와선 의도하지않은일을  할수있다.

그렇다면 서브루틴은 언제사용하는것이 효율적일까?
위는 자동적으로 시행해주는 서브루틴의 예이지만
명시적으로 시행해주고싶을떄는
goto, gosub명령어로 해결할수있다.
다음예제를 보자.

Example ;

send, This script is a very Simple script.{enter}
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
send, but i can't love you. because my parents hate you...
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
send, do you understand? wait.... wait.....
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...

내용은 보지말자.
구멍영어니까.. 하지만 이것만 봐두자.
스크립트 A B C B D B 가 순차적으로 시행되며
B의 스크립트는 상당히 길고 보기 좋지않다.
이를 어떻게 해결할까?

답이나오는가?
그렇다. b스크립트를 서브루틴으로 묶고 goto 명령어로 순차적으로 시행하면된다.
goto 명령어는 서브루틴으로 이동하는기능을 하니까.

send, This script is a very Simple script.{enter}
goto, B
send, but i can't love you. because my parents hate you...
goto, B
send, do you understand? wait.... wait.....
goto, B
return

B:
msgbox, im so sad
msgbox, All right
msgbox, That is all right
msgbox, i love you
msgbox, so much ..but...
return

스크립트가 한결간결해진거같다.

틀어보자.
순서대로 잘나오는가?
엇!
A스크립트를 시행하고 B스크립트를 시행한뒤 꺼져버린다..
왜??
바로 goto는 서브루틴으로 이동해서 return을 만나면 끝내버리는 명령어기떄문이다..
그럼?남은 gosub로 바꾼다음에 스크립트를 시행해보자.
잘되는가?

gosub가 언제나 무조건 좋은것은아니다.
어떤떄는 goto가 필요하고 어떤때는 gosub가 필요할떄가 있다.
두스크립트를 얼마나 적절하게 이용하느냐가 얼마나 보기좋고 간결하며 이해하기쉬운 코딩이 될지는
여러분판단에 맡길것이다.

이만 서브루틴에 대한 말은.. 접어야할것같다.

그거아는가??

서브루틴뿐아니라 변수에도 한글사용이 가능하다는것

사랑=너뿐
gosub, 하하
return
하하:
msgbox, %사랑%
return

필자는 영어를 사용하는게 더멋잇는 스크립트라고 생각하지만 개개인생각이 다른것이니까,
역시 적당히 떄에맞게 혼용해서 사용하는것도 현명하리라 판단된다.

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


오타있으면 지적, 내용틀린거 지적좀해주세요오옹.. 하핫

비추천 : 9
추천 : 0
I just want Your Love and Love That's all but Not anymore

       운장Lv.17 / 2010-05-17 22:51

goto에 대해 쉽게 얘기해주셨네요

       오키Lv.13 / 2010-05-18 09:35

기존 강좌들과 중복되지 않는 새로운 주제네요. ^^

덧붙이자면, 도움말에도 나와 있듯이 goto는 사용하지 않는 편이 좋습니다.
몇 백, 몇 천 이상의 줄이 있는 스크립트를 작성하다 보면 이리 저리 실타래처럼
엉키고 꼬이게 됩니다.

(사용하지 말자... 라는 말이 아니라, 자제하라는 말입니다. goto를 사용해서
간단한 몇줄 안되는 스크립트를 작성한다면 물론 goto를 사용할수도 있겠죠.)

(제 생각엔 gosub도 자제하는게 좋겠지만) 차선책으로 gosub나 다른 명령어로
구현하는게 더 나을것 같습니다.
예를들어, 위 강좌의 샘플 스크립트는 Loop로 대체가 가능하겠네요.

      답변글

       현수Lv.10 / 2010-05-18 17:48

저는 GoSub 쓰다가 함수를 공부하니 훨씬 좋더군요. 그냥 뻘소리입니다 ;; 죄송

      답변글

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

C를 배울때 교수님께 들은 얘기가 생각나네요 -_-.. 'Goto는 잊어라..' c에서도 버림받은 goto 라지요..

제 생각에도 라벨 보다는 함수의 응용이 아무래도 좋은 스크립트에 더 가까워지지 않나.. 싶네요..^^

       현수Lv.10 / 2010-05-18 17:50

감사합니다. 변수 이름에 한글도 쓸 수 있네요  ;; 몰랐네

       AHsK현수Lv.10 / 2010-07-30 15:30

Goto가 그런 거군요... 저는 초보라 나쁜 건지 아직도 잘 모르겠네요 ;; 현재 레벨7


 
 

 
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 770 2 0
42 서브루틴을 자유자재로 다뤄보자! (6) eocndLv.13 05-17 739 0 9
41 Loop에 관한 마구잡이 팁... (7) 운장Lv.17 05-15 1178 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.