1.인터페이스는 명시적으로 만들어야 한다.

인터페이스에 명시되지 않은 가정은 쉽게 간과되며 테스트가 어렵다.

int round(double d)
{
    return (round_up) ? ceil(d) : d;    // 나쁜 코드 : "보이지 않는" 의존성
}

위 코드에서 round(7.2)를 두 번 호출했을 때, 서로 다른 결과를 반환할 수도 있다는 점이 호출자에게 명확하게 보이지 않는다.

 

경우에 따라 환경 변수를 통해 일련의 작업 세부 사항을 제어하기도 합니다. 예를 들어, 일반 출력과 자세한 출력, debug와 optimized 모드 등,  비록 비-로컬 제어가 잠재적으로 혼란을 줄 수 있지만, 이는 고정된 의미를 갖는 세부 구현에만 영향을 미칩니다.

// 나쁜 코드 : fprintf의 반환 값을 테스트하지 않음
fprintf(connection, "logging: %d %d %d\n", x, y, s);

위 코드에서 만약 연결이 끊겨 로그 출력이 제대로 되지 않는다면 무슨 일이 일어날까?

 

해결법 : 예외를 던져야 한다.

1.인터페이스를 통해  non-local이나 암시적 상태를 전달하지 않도록 해야 한다

: 비 정적(const)멤버 함수는 객체의 상태를 통해 다른 멤버 함수에 정보를 전달 할 수 있다.

2. 인터페이스는 함수이거나 함수 집합이어야 한다.

함수는 함수 템플릿이 될 수 있으며, 함수 집합은 클래스 또는 템플릿이 될 수 있다.

 

규칙

1. 함수는 네임스페이스 스코프에 선언된 변수의 값에 따라 제어 흐름을 결정하지 않아야 한다.

2. 함수는 네임스페이스 스코프에 선언된 변수에 값을 쓰지 않아야 한다.

복사했습니다!