Pawn 프로그래밍

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

제어문

제어문(control statement)

제어문(if, switch, break, continue)은 switch문만 제외하고 C언어와 동일합니다.
 
C언어에서는 case 구문마다 break 제어문을 넣어주어야 해당 case 구문이 참일 때 아래 거짓인 case 구문을 실행하지 않고 switch문을 종료합니다.  허나 Pawn에서는 break 제어문을 넣어주지 않아도 case 구문마다 break가 걸립니다.
 
오히려 break문을 넣어주면 에러가 나게 된다. 그리고 또 한가지 Pawn에서는 다음과 같은 문법 사용이 가능합니다.

Swich문

  1. switch(num){
  2. case 1..5:
  3.     명령문;
  4. case 6..10:
  5.     명령문;
  6. }
Pawn에서는 최소값..최대값 식으로 case 구문의 값을 설정해주어 사용할 수 있습니다.
 
switch는 아주 긴 if ~ else if ~ else의 반복을 효율적으로 줄여줄 수 있습니다.
예를 들어 전화번호부의 단축 번호 모드가 있는데 여기서 사용자가 49번에 저장된 사람을 호출했다면 if와 else if, 그리고 else를 사용하면 이렇게 될 것입니다.
 
  1. if(번호 == 0)
  2. {
  3. 번호가 0이면(참이면) 수행
  4. }
  5. else if(번호 == 1)
  6. {
  7. 번호가 1이면(참이면) 수행
  8. }
  9. ...
  10. else if(번호 == 49)
  11. {
  12. 드디어!
  13. }
 
반복문을 배우지 않고 printf를 5000번 반복해야 했던 우리를 다시 보는 것 같습니다.
switch문으로 바꿔보겠습니다.
 
  1. switch(번호)
  2. {
  3. case 0: 0번에게 통화한다.
  4. case 1: 1번에게 통화한다.
  5. ...
  6. case 49: 49번에게 통화한다.
  7. ...
  8. }
 
이 예시는 switch나 if문으로 구성하는 것 둘 다 문제가 있긴 합니다. 더 효율적인 방법을 찾을 필요가 있지요. 그렇지만 단순 가독성으로 놓고 본다면 switch가 월등히 좋습니다.
일단 어떤 느낌인지는 대략 아실 것입니다.
 
  1. switch의 개형은 이렇습니다.
  2.  
  3. switch(정수형 값)
  4. {
  5. case 정수형 값: switch의 값과 case의 값이 일치할 경우 수행
  6. ...
  7. default: 아무것도 일치하지 않았을 때 수행
  8. }
 
만약 switch 옆에 1이란 숫자가 들어가면 case 중 1이라는 수가 붙어진 것을 찾아서 실행
하는 방식입니다. 그리고 만약 아무런 수도 일치하지 않았으면 default를 실행하는 겁니다. 
 
switch를 사용하게 되면 좋은 점은 여러 경우를 쉽게 다룰 수 있다는 것입니다. 예를 들어 플레이어의 레벨에 맞게 무기를 주는 모드를 만든다고 쳐봅시다. 0부터 3 레벨까지는 콜트를, 4부터 7 레벨까지는 데저트 이글을, 8부터 10 레벨까지는 M4를 주고 싶습니다. 그러면 이렇게 할 수 있습니다.

 

  1. switch(레벨)
  2. {
  3. case 0, 1, 2, 3: 콜트 주기
  4. case 4, 5, 6, 7: 데저트 이글 주기
  5. case 8, 9, 10: M4 주기
  6. }
  7.  
  8. 이정도 되면 if ~ else를 쓰는 것보다는 확실히 나아보입니다.
  9. 그리고 위의 코드는 아래와 완전히 같은 의미를 가집니다.
  10.  
  11. switch(레벨)
  12. {
  13. case 0 .. 3: 콜트 주기
  14. case 4 .. 7: 데저트 이글 주기
  15. case 8 .. 10: M4 주기
  16. }
  17.  
  18. 레벨이 순차적인 경우(0, 1, 2, 3...)에는 위처럼 사용할 수 있습니다.
  19. 경우에 따라서는 위와 같은 코드가 더 쉬워보이기도 합니다.
  20.  

if 조건문

if가 바로 조건문이라고 할 수 있습니다. 그럼 조건문은 어디에 쓰일까요? 거의 모든 곳에 다 쓰이게 됩니다. 

자판기에서 음료수를 뽑는데 얘가 돈이 있냐? 라던지 빵을 먹고 싶은데 빵이 있냐? 라던지 말입니다.

  1. if(조건)
  2. {
  3.   조건이 참일 경우 실행
 
만약 if옆의 괄호 안에 묶인 조건이 참 값을 반환할 경우 아래의 내용을 실행합니다. 하지만 우리는 조금 달리 생각해볼수도 있죠. 자판기 모드를 만드는데 사용자가 돈이 있으면 음료수를 주지만 없으면 돈이 부족하다는 문구를 띄워주고 싶습니다.
                                                           그럴때 필요한 것이 바로 else 입니다.
 
  1. if(조건)
  2. {
  3.   조건이 참일 경우 실행
  4. else
  5. {
  6.    조건이 거짓일 경우 실행
  7.  
 
이렇게 되면 음료수를 뽑을 수 있는 돈이 있다면 if의 아래에 돈이 없다면 else의 아래에 써주면 완벽해집니다.
 
하나만 더 해봅시다. 치킨을 주문하는데 돈이 있다면 치킨을 받고 돈이 없으면 쿠폰이 있는지 확인하고
쿠폰도 없다면 치킨을 주지 않습니다. 어떻게 해야 할까요? 이럴때 쓰는 것이 바로 else if 입니다.
 
  1. if(조건 1)
  2. {
  3.   조건 1이 참일 경우 실행
  4. else if(조건 2)
  5. {
  6.   조건 1은 거짓이나 조건 2는 참일 경우 실행
  7. }
  8. else
  9. {
  10.   모든 조건이 거짓일 경우 실행
  11. }
  12.  
 
if 아래에는 돈에 관련한 내용을 else if 아래에는 쿠폰에 관한 내용을 else 아래에는 치킨을 주지 않는 내용을 적으면 되는군요.
 
조건문 자체에 대한 내용은 어렵지 않습니다. 하지만 여러분들이 조건 내에 들어가야 할 내용을 착각해서 생기는 문제가 대부분 입니다. 사실 이것은 참과 거짓에 대한 개념과 반환에 대한 개념만 확립되어 있으면 어렵지 않은 내용일거라 생각됩니다.
 

댓글

댓글 본문
버전 관리
u4bi
현재 버전
선택 버전
graphittie 자세히 보기