포스트(post)

18. 조건에 따라 다른 기능 실행하기 4 - (if) 중첩

목표

(if)함수 안에 또 다른 (if)함수를 넣어서, 좀 더 복잡한 조건문을 만들어봅시다.



알아본 것들

앞에서 조건문과 관련하여 우리가 알아본 것들은 다음과 같습니다.

  1. (if)함수를 이용하면, 조건에 따라서 다른 기능을 수행하게 만들 수 있습니다.
  2. (=)(>=)와 같은 비교함수를 사용하면, 원하는 조건을 만들 수 있습니다.
  3. (and)(or)와 같은 논리함수를 사용하면, 여러 조건들로부터 원하는 조건을 만들 수 있습니다.

이번에는 우리가 위에서 알아본 것들을 바탕으로, (if)함수를 중첩해봅시다.



활용

(if)문을 중첩하여, 조건에 따라 다음과 같은 기능을 하도록 만들어 봅시다.

  1. 사용자가 “y”를 입력하면 선객체생성, 아니라면 문자객체를 생성
    1. 사용자가 선객체 생성을 선택했는데, 클릭 한 두 점의 길이가 10 미만이면 “선 길이가 너무 짧습니다”를 명령어창에 보여주고, 10이상이면 실제 선을 생성
    2. 사용자가 문자객체 생성을 선택했는데, 문자의 높이가 5 미만이면 “문자가 너무 작습니다”를 명령어창에 보여주고, 5이상이면 실제 문자객체를 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(progn
	(setq makeLine (getstring "\n선객체 생성(y), 문자객체 생성(스페이스바)")) ;1
	(if (= makeLine "y") ;2
		(progn ;3
			(setq point1 (getpoint "\n선의 시작점 클릭"))
			(setq point2 (getpoint "\n선의 끝점 클릭"))
			(setq dist (distance point1 point2)) ;4
			(if (>= dist 10) ;5
				(command "line" point1 point2 "")
				(princ "\n선 길이가 너무 짧습니다")
			)
		) 
		(progn ;6
			(setq point (getpoint "\n문자 삽입점 클릭"))
			(setq height (getdist point "\n문자 높이 입력"));7
			(if (>= height 5) ;8
				(command "text" point height 0)
				(princ "\n문자가 너무 작습니다")
			)
		)
	)
	(princ)
)
  1. 사용자로부터 y 또는 다른값을 입력받아서 makeLine에 저장합니다
  2. makeLiney인지 확인합니다
  3. makeLiney인 경우 (progn)으로 묶인 함수들을 실행합니다. (if)함수는 참인경우실행거짓인경우실행인자에서 1개의 함수만 실행가능하기 때문에, 여기서 (progn)함수로 여러 함수들을 묶어줍니다.
  4. (distance)함수는 두 점 사이의 거리를 반환 해 주는 함수입니다. 여기서 사용자가 클릭 한 두 점의 거리가 dist변수에 저장됩니다.
  5. dist의 값이 10 이상일경우 (command)함수로 선을 생성하고, 10미만인 경우에는 메시지를 띄웁니다.
  6. makeLiney가 아닌경우 (progn)으로 묶인 함수들을 실행합니다. (progn)을 사용한 이유는 위의 3.과 같습니다.
  7. (getdist)함수에 point(삽입점)을 넣어서, 사용자가 거리를 직접 입력하거나, 또는 삽입점으로부터 다른 점을 클릭하여 거리를 계산할 수 있도록 했습니다. (getdist)로 반환된 거리는 height변수에 저장됩니다.
  8. height의 값이 5 이상일경우 (command)함수로 문자를 생성하고, 5미만인 경우에는 메시지를 띄웁니다.

© IsaacGo. All rights reserved.