프로그래밍 언어론 6-1-5강. 단락 평가(Short-Circuit Evaluation)

[프로그래밍 언어론]

2019. 11. 21. 15:57

 

[단락 평가(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 : 단락평가 연산