0427
제7장 식과 배정문
7.1 서론 = 342
7.2 진술식 = 343
7.3 중복 연산자 = 352
7.4 타입 변환 = 354
7.5 관계식과 불리안 식 = 357
7.6 단락회로 평가 = 360
7.7 배정문 = 362
7.8 혼합형 배정문 = 367
>💡 정리expression에서 고려해야 할 사항 6가지
피연산자로 function call이 주어졌을떄,
를 사용했을때, callbyvalue 1way 파라미터/ callbyreference 2way 파라미터
수식에 있는 변수가 함수 호출로 인해 직접적으로 변경이 될때, 어떠한 순서로 처리할 것이냐!
컴퓨테이션
Expressions
수식
익스프레션을 정확히 평가해야지만 컴퓨테이션이 올바르게 수행된다.
우선순위를 명확하게 문법으로 정해져야함
변수의 값이 얼마인지가 컴퓨터의 상태임
operators,operands, parentheses, and function calls
Operaator
미리 정해져야하는 것
프로그래밍언어를 만드는 사람이 이걸 정의해놔야지만 expression의 값이 모호하지 않게 항상 일관된 값을 뽑아낼수가 있다.
Operator precedence rules? 연산자 우선 순위 규칙?
하나의 expression 안에 여러개 쓰였을떄 뭘 먼저
Operator associativity rules? – 연산자 연관성 규칙?
같은 우선순위를 가지는 연산자가 하나의 expression에서 쓰일때?
Associativity (오→ 왼, 왼→ 오)
Order of operand evaluation? – 피연산자 및 평가 순서?
피연산자 operand에 대한 평가
Operand evaluation side effects? – 피연산자 평가 부작용?
–
Operator overloading? – 연산자 오버로드?
연산자 오버로딩 허용함?
| C | X |
| --- | --- |
| C++ | O |
| JAVA | X → 자바를 설계한 사람의 의도인거죠~
대신 메소드 오버로딩이 있음
사실은 세모임 ㅋ
숫자에 대해서는 덧셈, string은 concat으로 자동으로 됨. 하지만 사용자가 정의해서 사용하는게 불가능하다~ |
| PY | O |
Type mixing in expressions? – 식에 혼합을 입력하시겠습니까?
APL 초기에는 연산자 우선순위가 없었음!
: 연산자를 실행하는 순서
→ 우선순위가 높은 연산자가 먼저 실행됨
연산 하기 전에 반영할 것인지, 연산 수행한 다음에 반영할 것 인지
1. 피연산자로 function call이 주어졌을떄,
1. 글로벌 변수
2. 2way 파라미터
를 사용했을때, callbyvalue 1way 파라미터/ callbyreference 2way 파라미터
수식에 있는 변수가 함수 호출로 인해 직접적으로 변경이 될때, 어떠한 순서로 처리할 것이냐!
아예 못하게 하는 방법
function call 로 인해 피연산자의 값이 안바뀌게 함
→ 전역 변수 못쓰게 하고 2way 파라미터 못쓰게 함.
syntax error!
1. 장점 : 고민할 필요가 없다 리더빌리티 올라감
2. 단점 : 플랙서 빌리티 낮아짐 콜바이 레퍼런스 지원 안함 (제약조건을 강하게 걸어서 side effect를 없애기) , 라이터빌리티도 떨어짐.
→ 해결책이 못됨!!!
명확하게 정하는 방법
⇒그래서 메이저 언어들은 두 방법 다 안하고, 프로그래머들이 인지하고 side effect 나지 않게 코딩 해라. 밖에서 빼서 미리 계산하라. 파라미터를 같은 수식에 있는 애를 쓰지 말던지.
: 똑같은 함수에 대해서 같은 파라미터를 줬을때는 리턴값을 같게 만드는것
(당연히, 파라미터(아규먼트의 값)이 다를떄는 상관 없음)
똑같은 함수를 호출하면서 똑같은 파라미터를 줬지만 다른 결과가 나올때,
⇒referential transparency를 갖추고 있지 않다.
똑같은 이름으로 assign이 되어 있는 두가지 요소가 있을떄, 똑같이 주어졌으면 각각 쓰였을때 동일한 값을 보장한다면 그것을 referential transparency라고 한다.
referential transparency = 같은 함수에 같은 파라미터 값을 줫을떄는 리턴값이 같다.
참조의 투명성이 보장되면 장점
100%보장 언어 → 변수를 안쓰는 언어. funtional PL
연산자 오버로딩으로 인해 라이터빌리티가 올라갈 수 있지만
특정상황에서는 오히려 Readability 낮아질 수 있다.
C | X |
---|---|
C++ | O → user defined 연산자 오버로딩 지원 |
JAVA | X → 자바를 설계한 사람의 의도인거죠~ |
대신 메소드 오버로딩이 있음
사실은 세모임 ㅋ
(예외상황) 숫자에 대해서는 덧셈, string은 concat으로 자동으로 됨.
하지만 (user defined) 사용자가 정의해서 사용하는게 불가능하다~ |
| PY | O → user defined 연산자 오버로딩 지원 |
에러가 발생하는 경우
syntax error!!