[직교성(Orthogonality)]
: 6.1.2장에서 expressions, statements, 구조등에서 직교성의 중요성에 대해 말했었다. 그만큼 중요!
: 직교성이 잘 지켜지는 언어들은 쉽게 사용될 수 있고 이해될 수 있다.
: Algol 68과 C는 statements과 expressions의 차이를 제거함으로써 직교성을 강화했다.
[직교성의 예시1 - void(유용한 값 반환 하지 않는 경우)]
: 유용한 값 반환 하지 않지만 side effect를 실행하는(ex. void printf()) statement를 특정 짓기 위해서, 몇몇 언어들은 단일 값에 대해 간단한 타입을 제공한다.
(= printf()와 같은 statement에서는 유용한 값을 반환하지 않는데 이를 알려주기 위해 void라는 간단한 타입을 제공한다)
: 만약 프로그래머가 특별히 사용되지는 않는 값을 반환하는 subroutine 호출하기를 윈하면 void를 사용하면 된다.
# 유용한 값 반환하지는 않지만 subroutine 호출을 원하는 상황 처리 예시
void print(){ System.out.println("ss"); // return 값 없음 } |
[직교성 예시2 - null(유효하지 않은 값 가르키고 싶은 경우)]
: 변수의 값을 제거할때, 해당 변수가 더이상 유효한 값을 가지고 있지 않다는 것을 알려줘야 한다.
# 포인터 타입 : null 사용
# enumerations : "none of the above" 추가
: 공통적으로 값이 "없다" 라는 상태를 의미하기 위한 것이다.
: "none of the above"의 직교성을 충족시키기위해, 많은 함수형, 명령형 언어들이 특별한 타입 구조인 Option or Maybe를 지원한다.
( 그렇다고 option이나 maybe가 따로 있는게 아니라, 아래와 같은 예외사항을 위한 if를 만들어주는 개념이다)
# Option 타입 예시
func divide(n : Double, d : Double -> Double? {
if d == 0 { return nil } // 0.0으로 나누었을때..
return n / d
}
function show(v : Double?) -> String {
if v == nil { return "??" }
return "\(v!_)"
[직교성 예시3 - aggregates]
: 구조체와 같은 타입의 객체를 위한 값들을 명시해준다 ( = aggregates )
: 정적 데이터 구조 초기화 측면에서 매우 가치 있다. (없으면 실행 시점까지 초기화 수행 연기.. 시간 낭비)
: 구조화된 타입에 대해 aggregate 지원.
# aggregate 지원된 구조화된 타입 예시
type person is record // 구조화된 타입에 aggregate 지원
name : string(1..10);
age : integer;
end record;
p, q : person;
A, B : array (1..10) of integer;
'[프로그래밍 언어론]' 카테고리의 다른 글
프로그래밍 언어론 7-2강. 타입 검사(Type Checking) (0) | 2019.12.13 |
---|---|
프로그래밍 언어론 7-1-4강. 타입의 분류(Classification of Types) (0) | 2019.12.12 |
프로그래밍 언어론 7-1-2강. 다형성(Polymorphism) (0) | 2019.12.10 |
프로그래밍 언어론 7-1-1강. "타입"의 의미 (0) | 2019.12.10 |
프로그래밍 언어론 7강. 타입 시스템(Type Systems) (0) | 2019.12.10 |