프로그래밍 언어론 7-1-3강. 직교성(Orthogonality)

[프로그래밍 언어론]

2019. 12. 12. 21:20

 

[직교성(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;