세자리수 컴퓨팅에서의 goto문
- 문제점 : 스파게티 코드 (작성 및 해석의 어려움)
- 해결방법 : 단일 입구, 단일 출구
문장 수준의 흐름제어
- 순차구조(암시적 형태)
- 선택구조(IF문)
- 반복구조(For문)
구조화 프로그래밍
- 공간적 순서가 수행 순서임
- 계층적으로 설계 (반복문 안에 반복문...가능)
복합문 : 여러 문장이 모여 하나의 문장을 이룬 형태
ex) ALGOL60 : begin ... end/ C언어 : { }
블록 : 새로운 선언을 포함할 수 있는 복합문
ex) Pascal : begin ... end (블록 지원 안함) / C : {중괄호} , 모든 복합문은 블록임 / python : 들여쓰기
선택문 : 둘 이상의 경로 중 하나 선택할 수 있는 제어문
- 양방향, 다중선택 (단방향선택 , 3방향 선택)
단방향 선택 : (else가 없는) if문
양방향 선택 : (then, else가 있는) if문
문제점 : 선택문의 중첩
일반적인 해결책 : 짝이 없는 else문 발생 -> 가장 가까운 if문과 짝을 이루자!
-> pascal, C, c++, java
해결책 1 : 직접 중첩 금지
Perl에서 then절과 else절이 복합문 => 바깥 if문에 if,else문 포함
해결책 2 : 종결어 사용
end if, fi, end 사용
-> Fortran 90, Ada, Ruby
해결책 3 : 들여쓰기
-> 파이썬
다중 선택 구조
- 초기 다중 선택 구조(FORTRAN)
- 중첩된 if문, goto문으로 만들 수 있음
- 길고 복잡 비신뢰적임
- C의 다중 선택구조 (c++,java에서도 채택됨)
- swith-case문 - 정수형만 가능
- 해당하는 조건이 맞으면 그거부터 계속 실행함
- break문으로 빠져나옴
- Java의 continue문
- 이 반복을 종료해서 그 다음 반복으로 가겠다는 의미
- 해당 반복을 빠져나와서 첫번째 반복문에서 다시 검사를 시작함
- Java의 label break문
- 여러 반복문을 빠져나올 수 있음
- goto 대신 사용함
- ex) break outerloop; // outerloop명을 가진 루프를 벗어나겠다
사용자 정의 반복 제어
python vs c#,java
- c#,java는 컴파일 언어로, 변수 타입 선언 필요
- python는 계수기 변수를 선언하여 리스트 크기를 알아서 그 만큼 반복을 진행해야함
- c#,java는 알아서 크기 계산해줌. 계수기 필요X
goto문 문제점 : 스파게티 코드
goto문이 유용한 예
중첩된 반복문!
- break문을 실행하면 이 반복을 정상종료하고 나온 것인지, break를 통해서 종료된 것인지 알 수 없음
- goto를 사용하면 이해하기 쉽게 할 수 있음
'프로그래밍 언어론' 카테고리의 다른 글
[프로그래밍 언어론] 9장 부프로그램 (0) | 2024.06.14 |
---|---|
[프로그래밍 언어론] 5. 이름, 바인딩, 영역(1) (0) | 2024.05.12 |
[프로그래밍 언어론] 3. 구문과 의미론 (0) | 2024.05.12 |
[프로그래밍 언어론] 1. 기본적인 사항 (0) | 2024.03.06 |