[단락 평가(Short-Circuit Evaluation)]
: 부울(논리)연산을 할 때에 앞 연산자의 결과에 따라 뒤 연산자의 실행여부가 결정되는 계산 방식
: 또한, 이는 A&&B와 같은 논리연산식에서 A 위치에 보다 단순한 표현식으로 위치를 바꿔 빠르게 계산한다.
# 단락 평가 예시
(a < b) and (b < c) # a가 b보다 크면 뒤의 b < c를 비교해보지 않아도 된다. |
if (condition1 && function1() ... ) # condition1 F면 뒤에꺼 계산 안해도 된다. |
[여러 언어에서의 단락 평가]
# C언어에서 단락평가
p = my_list; while (p && p -> key != val) # 비교적 빠른 연산 가능한 'p'를 A 자리에 오게 해서 계산 p = p-> next |
# Pascal에서의 단락 평가
: Pascal에서는 단락 평가를 지원하지 않아 코드가 복잡해진다.
(한줄에 여러개 논리연산자 배치 불가능한 정도만 알고 있으면 된다)
[단락 평가의 또다른 쓰임새]
: 단락 평가에서 비교적 간단한 연산을 앞에둬 빠른 계산을 유도 하는 특성을 이용해 여러 기본적 예외상황을 판단하기도 한다.
1) out-of-bound (Null 여부 확인)
const int MAX = 10; int A[MAX]; ... if (i >= 0 && i < MAX && A[i] > foo) ... |
2) Division by Zero
if ( d == 0 || n / d < threshold) ... |
[단락 평가와 일반적 논리 연산]
: 가끔씩 단락 평가를 사용하는 경우가 부적절한 경우가 존재한다.
표현식 A, B가 둘다 side effect를 가지고 있을때와 같이 이 두 표현식 둘다 평가하고 싶어하는 경우. |
: 그래서 몇몇 언어들은 두가지 방식 (일반적방식, 단락평가방식) 을 다 지원한다.
- and, or : 일반적 논리 연산
- and then, or else : 단락평가 연산
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 6-2-1강. goto문의 구조적 대안(Structured Alternatives to goto) (0) | 2019.11.22 |
---|---|
프로그래밍 언어론 6-2강. 구조화, 비구조화된 흐름(Structured and Unstructured Flow) (0) | 2019.11.22 |
프로그래밍 언어론 6-1-4강. 표현식 내의 순서(Ordering within Expressions) (0) | 2019.11.18 |
프로그래밍 언어론 6-1-3강(4). 생성자 초기화 (Constructors) (0) | 2019.11.15 |
프로그래밍 언어론 6-1-3강(3). 확실한 초기값 할당 (Definite Assignment) (0) | 2019.11.15 |