Goto 문: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
편집 요약 없음
TedBot (토론 | 기여)
잔글 봇: 틀 이름 및 스타일 정리
9번째 줄:
고급 언어에서 goto 문은 비판의 대상이 되어 왔는데, goto 문이 과도하게 사용되면 읽고 유지하기 힘든 [[스파게티 코드]]가 나오기 쉽기 때문이다. [[구조적 프로그래밍]]은 [[1960년대]]와 [[1970년대]]에 더 두드러졌는데, 많은 [[컴퓨터 과학자]]들의 결론은 프로그램이 항상 goto 문 대신 일명 ‘구조적’인 흐름 제어문([[순환문]], if-then-else문)을 사용해야 한다는 것이다.<ref>{{서적 인용 |저자= [[데니스 리치]] |저자2=[[브라이언 커니핸]] |제목= C 언어 프로그래밍 |꺾쇠표= |출판사= 대영사 |연도= 1998 |판= 2 |쪽= 91 |isbn= 89-7163-026-4}}</ref> 그러나 goto 문의 사용이 종종 나쁜 습관이긴 하지만, 많은 프로그래밍 언어에서 goto 문을 사용하지 않고는 간단히 되지 않는 경우(중첩 순환문을 빠져나갈 때나 [[예외 처리]]할 때)가 있다고 주장하는 사람들이 있다.
 
goto 문에 대한 한 가지 유명한 비판은 [[1968년]]에 [[에츠허르 데이크스트라]]의 'goto 문의 해로움'<ref>{{언어고리언어링크|en}} [[에츠허르 데이크스트라]]: [http://www.acm.org/classics/oct95/ Go To Statement Considered Harmful]. ''Communications of the ACM'' '''11''':3 (1968), 147–148.</ref> 이라는 서신이다. 이 서신에서 데이크스트라는 더 높은 수준의 언어에서는 goto 문을 제한하지 않으면 안된다고 했는데, 이것은 프로그램의 정확성을 분석하고 증명하는 것을(특히 순환문을 포함해서) 어렵게 하기 때문이라고 했다. [[도널드 커누스]]의 'goto 문을 사용한 구조적 프로그래밍'<ref>{{언어고리언어링크|en}} [[도널드 커누스]]: [http://pplab.snu.ac.kr/courses/adv_pl04/papers/p261-knuth.pdf Structured Programming with Goto Statements]. ''Computing Surveys'' '''6''':4 (1974), 261–301.<!-- This link probably violated copyright --></ref> 에서는 goto의 적절한 위치를 고찰한다. 일반적으로 이것들은 특정 프로그래밍 구조가 없기 때문이다. 이런 경우들에서 goto 문은 항상 원하는 구조를 에뮬레이트 할 수 있고, 따라서 이것이 프로그래밍의 기본적인 요소의 하나라는 것이다. 다른 해법은 [[매크로 (컴퓨터 과학)|매크로]]를 이용하여 원하는 제어 구조를 만드는 것이다.([[리스프]]와 그 변종이나 [[포스 프로그래밍 언어|포스]]에서는 이렇게 해서 대부분의 일을 할 수 있다.)
 
== 변형 ==
* 계산된 goto 문(Computed GOTO): 수식의 값에 따라 몇 군데의 레이블로 분기하거나, 변수에 저장되어 있는 레이블로 분기한다. 계산된 goto 문은 보통 goto 문보다 문제가 더 심각한데, 프로그래머가 어떤 구문을 본다고 해도 다음에 무엇이 수행될지 알 수 없기 때문이다.
** [[베이직]]의 ON goto 문은 전자의 계산된 goto 문을 지원하며, 각각의 사례별로 분기에 유용하다.
** [[C (프로그래밍 언어)|C]]에서는 [[Switch 문]]을 지원한다. 어떤 C 컴파일러들은 레이블 변수에 따라 분기하는 goto 문을 제공하기도 한다.
 
30번째 줄:
 
== 바깥 고리 ==
* {{언어고리언어링크|en}} [http://www.geek-central.gen.nz/peeves/programming_discipline.html A Structured Discipline of Programming]
 
{{프로그래밍 구성체}}