2011년 7월 1일 금요일

[Autohotkey] 서브루틴

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
필자는 영어를 사용하는게 더멋잇는 스크립트라고 생각하지만 개개인생각이 다른것이니까,
역시 적당히 떄에맞게 혼용해서 사용하는것도 현명하리라 판단된다.
---------------------------------------------------------------------------------
오타있으면 지적, 내용틀린거 지적좀해주세요오옹.. 하핫

댓글 없음:

댓글 쓰기