[PL] Ch07. Expressions & Assignment Statements - 1

dev-0eum·2023년 12월 16일
0

PL

목록 보기
2/4
post-thumbnail

07-1. Arithmetic Expr

대부분의 Language의 expr은 단항(Unary),이항(Binary),삼항(Trinary) 중 하나.

Unary - prefix or postfix
: cnt++

Binary - infix
: a + b

> 연산자 우선순위 <

• Associativity Rule

Base: left to right
except: "**" right to left

• Conditional Expr.

average = (count == 0) ? 0 : sum / count

[Evaluate as following]

if (count == 0)
	average = 0
else
	average = sum /count

• Operand Evaluate Order

말 그대로 평가(evaluation)의 순서에 따라 의미가 변화한다.

  • Functional side Effects
    : when a function changes a two-way params or a non-local variable.

이는 다음과 같은 예시로 쉽게 설명 가능하다.

  • Example
a = 10;
b = a + fun(a);

이때, fun()이라는 함수가 a를 변화시키는 함수라면 문제가 발생한다.

int a = 5;
int fun1(int param) {
	a = 17;
    return 3;
}

void main() {
	a = a + fun1();
}

이렇게 된다면 두 가지 상황이 발생한다.

1) a가 먼저 evaluate

8

2) fun1()이 먼저 evaluate

20

• Referential Transparency

위에서 언급한 문제점과 일맥상통한 문제일 수 있다.
이 개념은 '함수적 부작용(위에서 언급)'과 관련되고 영향을 받는다.

result1 = (fun(a) + b) / (fun(a) – c); 
temp = fun(a);
result2 = (temp + b) / (temp – c);

fun()이 b와 c를 변형시키지 않는다면 result 1과 2는 동일한 값이어야 한다.
만약 부작용이 발생한다면 프로그램의 참조 투명성을 위반한다고 표현한다.


07-2 Overloaded Operators

- Loss of compiler error dection
- Loss of readability

(still writing now...)


07-3 Type Conversions

• Narrowing & Widening Conversion

ex. Scope
double
[------------------------]
float
[-------------------]
int
[-------------]

- narrowing conversion
위에서 아래로: scope가 줄어듦.
handling 할 수 없는 범위가 있으면 >> 정보 소실 (causes Trouble)

- widening conversion
아래에서 위로: scope가 늘어남.
정보 소실의 위험이 없음 >> 안전함.

• Mixed Mode expr

"Cast"
: Coercion
: implicit type conversion
-> Decrease in the [type error detection] ablility of the complier

profile
글을 쓰는 개발자

0개의 댓글