특정 조건일 참일때만 동작하는 코드가 있다.
ex) 제곱근을 계산할 땐 양수일 때만 동작
이런 코드에서 어서션을 사용해서 코드를 읽지 않고 동작을 명시적으로 추측할 수 있다.
if(this.discountRate)
base = base - (this.discountRate * base);
assert(this.discountRate >= 0);
if(this.discountRate)
base = base - (this.discountRate * base);
- 참이라고 가정하는 조건이 보이면 그 조건을 명시하는 어서션을 추가한다.
아래 코드는 고객이 상품 구입 시 할인율을 적용받는 코드인데, 여기에서 할인율이 항상 양수라는 가정이 깔려있다. 어서션을 사용해서 이 가정을 명시하는 과정을 알아보자
applyDiscount(aNumber) {
return (this.discountRate)
? aNumber - {this.discountRate * aNumber)
: aNumber;
}
- 3항 표현식에는 어서션을 넣을 장소가 적당하지 않아 if-then으로 변경하기
applyDiscount(aNumber) {
if (!this.discountRate) return aNumber;
else return aNumber - {this.discountRate * aNumber);
}
- 어서션 추가하기
applyDiscount(aNumber) {
if (!this.discountRate) return aNumber;
else {
assert(this.discountRate >= 0);
return aNumber - {this.discountRate * aNumber);
}
}
- 그런데 위와 같은 경우는 어서션을 세터 부분에 추가하는 것이 좋음. 왜냐면 위 함수에서 예외가 발생했다면 언제 예외가 처음 발생했는지 추척해야 하기 때문이다.
--- Customer 클래스
set discountRate(aNumber){
asset(null === aNumber || aNumber >= 0);
this._discountRate = aNumber;
}