일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 코루틴 빌더
- pytest
- k8s #kubernetes #쿠버네티스
- Spring Batch
- 겨울 부산
- terminal
- 자원부족
- JanusGateway
- VARCHAR (1)
- mp4fpsmod
- kotlin
- 달인막창
- 깡돼후
- table not found
- preemption #
- PersistenceContext
- tolerated
- vfr video
- JanusWebRTCServer
- PytestPluginManager
- JanusWebRTC
- JanusWebRTCGateway
- python
- Value too long for column
- taint
- 개성국밥
- 티스토리챌린지
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 오블완
- 코루틴 컨텍스트
너와 나의 스토리
[프로그래밍 언어론] Ch8 Statement-Level Control Structures 본문
Control Structure
- 제어문(control statement)과 실행을 제어하는 문장(statement)이다.
Selection Statements
- 둘 이상의 실행 경로 중에서 선택할 수 있는 수단을 제공
- 두가지 카테고리:
- Two-way selectors
- Multiple-way selectors
Nesting Selectors
if, else 쌍은
- Python, F# - 들여쓰기로 구분
- java - else문은 가장 가까운 if문과 짝을 맺음
- C, C#, C++ - { }를 통해 구분
- Ruby - if문 혹은 if, else문 이후에 end 명령를 넣어줘 if문이 끝났음을 알림
Multiple-Way Selection
- 디자인 이슈
- 선택을 제어하는 식의 형식과 타입은 무엇인가?
- 선택 가능한 세그먼트가 어떻게 명세되는가?
- 구조를 통한 실행 흐름은 하나의 선택 가능한 세그먼트만 포함하도록 제한되어 있는가?
- case values는 어떻게 지정되는가?
- 표현되지 않은 표현식 값은 어떻게 됩니까?
- C#
- 둘 이상의 세그먼트를 암시적으로 실행할 수 없도록 하는 정적 의미 규칙이 있다는 점에서 C와 다르다
- 선택 가능한 각 세그먼트는 무조건 분기 (goto 또는 break)로 끝나야한다.
- 또한 C#에서 제어 표현식 및 case 상수는 문자열일 수 있다.
Guarded Commands
- 다익스트라가 디자인
- 목적: 개발 중 검증을 지원하는 새로운 프로그래밍 방법론을 지원하기 위함
- 동시 프로그래밍을 위한 두 가지 언어 메커니즘의 기본
- 기본 아이디어: 만약 평가의 순사가 중요하지 않다면, 프로그램은 평가 순서를 지정해서는 안된다.
- 평가 순서: 연산자 우선 순위 등
control statements 선택
- selection과 logical pretest loops는 언어 사이즈와 작성력(writability)의 trade off가 있다.
*
명령형 언어 - 계수기 제어 루프 -> iteration 사용
함수형 언어 -> recursion 사용
사용자-위치 루프 제어 메커니즘(User located loop control mechanisms)
- C, C++, Python, Ruby, C#은 unconditional unlabeled exits (break)를 가진다.
- Java, Perl은 unconditional labeled exits (break in Java, last in Perl)을 가진다.
- C, C++, Python은 unlabeled control statement (continue)를 가진다
- continue: 현재 반복에서 남은 부분은 스킵하지만, 루프를 나가지는 않는다.
- Java, Perl은 continue의 labeled version을 가진다.
<복습 문제>
1. 제어 구조의 정의는 무엇인가?
제어 구조는 제어문과 제어문이 실행을 제어하는 문장들의 집합이다.
9. 사전-검사 루프문은 무엇인가? 사후-검사 루프문은 무엇인가?
제어 메커니즘의 위치에 대한 주요 선택은 루프의 윗 부분이나 아랫부분이다. 여기서 위나 아래는 물리적이 아닌 논리적 의미이다. 고려 사항은 제어 메커니즘의 물리적 위치가 아니라, 제어 메커니즘이 루프 몸체의 실행 전이나 후에 실행되어서 제어에 영향을 미치는가에 관한 것이다. 여기서는 사전-검사라는 용어를 사용하여 루프 종료에 대한 검사가 루프 몸체가 실행되기 전에 이루어진다는 것을 의미하고, 사후-검사라는 용어를 사용하여 그 검사가 루프 몸체가 실행된 후에 이루어진다는 것을 의미한다.
12. 사용자-지정 루프 제어문이 고안된 주요 이유는 무엇인가?
어떤 상황에서는 프로그래머가 루프 제어 위치를 루프의 처음이나 끝이 아닌 다른 곳을 선택할 수 있으면 편리하다. 결과적으로, 어떤 언어는 이러한 기능을 제공한다. 사용자-지정 루프 제어, 즉 탈출을 위한 구문 구조는 상대적으로 단순할 수 있으며, 따라서 그 설계는 어렵지 않다. C와 C++은 조건과 레이블이 없는 탈출을 포함한다. Java, C#은 조건은 없으나 레이블을 갖는 탈출을 포함한다. 이러한 구조는 매우 제한된 분기문을 통해서 goto 문에 대해서 흔히 발생하는 필요성을 충족시킨다. goto 의 목적지는 프로그램에서 goto 문의 위나 아래 등 다양한 위치일 수 있다. 그러나 사용자-지정 루프 탈출의 목적지는 탈출지점 아래에 위치해야 하고, 복합문의 끝 바로 뒤에만 올 수 있다.
15. 사용자-정의 반복자 제어란 무엇인가?
사용자-정의 데이터 구조와 사용자-정의 함수를 사용하여 구조의 원소들에 대해서 반복한다. 이러한 함수를 반복자라 부른다. 반복자는 각 반복의 시작 부분에서 호출되고, 반복자는 호출될 때마다 특정 데이터 구조로부터 한 개의 원소를 특정 순서로 반환한다. 반복자가 더 이상의 원소를 찾지 못하면 사용자-정의 반복문은 종료된다. C기반 언어의 for 구조는 상당히 많은 유연성 때문에 사용자-정의 반복문을 표현하는데 사용될 수 있다. 이진트리의 노드들이 처리된다고 가정하자. 트리의 루트가 root 변수에 의해서 가리켜지고, traverse가 그 매개변수를 요구된 순서로 트리의 다음 원소를 가리키도록 설정하는 함수이면, 다음 코드가 사용 될 수 있다. for (ptr = root; ptr == null; traverse(ptr)) { ... } 이 문장에서 traverse는 반복자이다.
<연습문제>
1. 계수 루프와 논리 루프 구조가 결합된 구조가 필요한 3가지 경우를 서술하시오.
a. A list of values is to be added to a SUM, but the loop is to be exited if SUM exceeds some prescribed value.
값들의 리스트가 SUM에 추가되지만 SUM이 규정된 값을 초과하면 루프는 종료된다.
b. A list of values is to be read into an array, where the reading is to terminate when either a prescribed number of values have been read or some special value is found in the list.
값들의 리스트는 배열로 읽어야하며, 규정된 수의 값을 읽거나 리스트에서 특정 값을 찾은 경우 읽기가 종료된다.
c. The values stored in a linked list are to be moved to an array, where values are to be moved until the end of the linked list is found or the array is filled, whichever comes first.
링크드 리스트에 저장된 값은 배열로 이동한다. 여기서 링크드 리스트의 끝을 찾거나 배열이 채워질 때까지 값이 이동한다.
4. 복합문에 대해서 동일한 끝 표시 예약어를 사용하는 것에 대한 찬성과 반대 의견을 제시하시오.
Unique closing keywords on compound statements have the advantage of readability and the disadvantage of complicating the language by increasing the number of keywords.
8. Java의 제어문에서 (C와 C++처럼 산술식도 허용하는 것에 반하여) 단지 불리안식만을 사용하는 것에 대한 찬성과 반대 의견은 무엇인가?
The primary argument for using Boolean expressions exclusively as control expressions is the reliability that results from disallowing a wide range of types for this use. In C, for example, an expression of any type can appear as a control expression, so typing errors that result in references to variables of incorrect types are not detected by the compiler as errors.
끝
'Programming Language' 카테고리의 다른 글
[C++] 클래스(class)와 구조체(struct ) (0) | 2020.02.18 |
---|---|
[프로그래밍 언어론] CH7 Expressions and Assignment Statements (0) | 2019.12.04 |
[프로그래밍 언어론] CH6 Subprograms (0) | 2019.12.04 |
[프로그래밍 언어론] CH9 Subprograms (0) | 2019.12.03 |
[C++] freopen()한 후 cin 무시되는 상황 해결 (0) | 2019.06.01 |