포스트(post)

14. 조건에 따라 다른 기능 실행하기 1 - (if)

목표

조건에 따라서 다른 기능을 실행할 수 있는 조건문 함수 중 (if)를 사용 해 봅시다



조건문

오토리습으로 한가지 정해진 기능만을 수행하도록 만들 수도 있지만, 대부분은 다양한 조건(예를 들면 사용자의 다른 입력)들에 대해서 다른 기능을 수행하도록 만들게 될 겁니다.

이 때 사용하는 것이 조건문입니다. 조건문은 먼저 조건에 해당하는지 여부를 먼저 판단하고, 그 조건에 해당할 때(참)와 해당하지 않을 때(거짓)에 각각 다른 내용을 실행하도록 만들어줍니다.

오토리습에서 조건문은 대표적으로 (if)함수와 (cond)함수가 있습니다. 이 중 if함수에 대해서 알아보겠습니다.



참과 거짓 : bool(boolean)

조건문에 대해 설명하기 이전에 거짓에 대해서 알아보겠습니다. 이 거짓은 조건문에서 특정 코드를 수행하는 기준이 되는데요. 조건문에서 조건이 일 경우에는 참일경우에 실행할 코드를 실행하고, 거짓일 경우에는 거짓일 경우에 실행할 코드를 실행할 수 있습니다.

여기서 거짓 두 가지 중 하나만을 가지는 자료형을 bool이라고 부르며, 모든 프로그래밍 언어에서 이를 사용하지만, 오토리습에서는 거짓에 사용되는 단어가 명확하게 정해져 있지는 않습니다.

오토리습에서 거짓을 표현할 때 nil을 사용합니다. 이 nil은 사실 어떤 변수나 함수 등에 값이 없을 경우를 의미하는 단어인데요. 이를 거짓의 의미로도 사용합니다. 한번 저희가 만들지 않은 변수에 무슨 값이 들어 있는지 확인 해 보겠습니다. 변수명 앞에 !를 붙이면 해당 변수의 값을 반환 해 준다고 했죠 아래와 같이 명령어 창에 입력 해 봅시다

1
!num

아직 (setq)함수로 num이라는 변수에 값을 넣지 않은 상태라면, 명령어 창에 nil이 표시되는 것을 확인 하실 수 있으실 겁니다. 이 말은 num이라는 이름의 변수에 아무런 값이 들어있지 않다는 것을 의미합니다.

반대로 오토리습에 있어서 은 일반적으로 T(참, true)를 사용할 수 있지만, 사실상 nil이 아닌 모든 값을 으로 취급합니다. 프로그래밍 언어에 따라서는 0은 거짓으로서 사용하는 경우도 있긴 하지만, 오토리습에서는 0도 숫자이므로 으로 취급합니다.

즉 앞으로 오토리습에서 조건문을 사용할 때, 그 값이 nil이면 거짓이고 nil이 아니면 이라고 생각하시면 됩니다.



if

(if)함수는 다음과 같이 두 가지 방법으로 사용할 수 있습니다.

1
2
3
4
; 참인경우만 실행
(if 조건 참일때실행)
; 참인경우와 거짓인경우에 다른 내용 실행
(if 조건 참일때실행 거짓일때실행)

참인경우만 실행

먼저 인자가 2개(조건, 참일때실행)인 경우는, 조건인 경우에만 참일때실행부분의 코드를 실행하며, 거짓인 경우에는 참일때실행 부분을 실행하지 않고 지나갑니다.

한번 다음의 코드를 명령어 창에 붙여넣어서 실행 해 볼까요?

1
(if T "참입니다")

그러면 “참입니다”가 명령어 창에 보일 겁니다. 이는 (if)문의 조건이 T이므로 뒤의 참일때실행코드가 실행 및 반환되기 때문입니다.

이번에는 조건에 nil을 넣어서 실행 해 봅시다

1
(if nil "거짓입니다")

과연 명령어 창에는 무엇이 표시될까요? “거짓입니다”가 표시될 것이라고 생각 하신 분도 있겠지만 그 결과는 nil입니다. (if)함수는 조건nil이기 때문에 참일때실행될 코드인 “거짓입니다”는 실행하지 않고 바로 nil을 반환 해 버리기 때문입니다.

참인경우와 거짓인 경우에 다른 내용 실행

만약 위와 같이 조건nil인 경우에도 특정 코드를 실행하게 하고 싶다면, 거짓일때실행코드를 추가 해 주면 됩니다. 즉 인자가 3개(조건, 참일때실행, 거짓일때실행)가 되는 거죠.

한번 조건인 경우에는 “참입니다”를, 거짓인 경우에는 “거짓입니다”라는 문구가 명령어창에 표시되도록 만들어 봅시다. 다음 코드를 명령어 창에 붙여넣어 주세요.

1
(if nil "참입니다" "거짓입니다")

조건nil이므로 거짓일때실행 코드가 실행 및 반환되어 “거짓입니다”가 명령어창에 표시됩니다. 한번 조건을 nil이 아닌 값(T나 숫자 등)으로 변경해서 “참입니다”가 제대로 표시 되는지 확인 해 보세요.

© IsaacGo. All rights reserved.