2021.11.01
before
if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd)) change = quantity * plan.summerRate;
else change = quantity * plan.regularRate + plan.regularServiceCharge;
after
if (summer()) charge = summerCharge();
else charge = regularCharge();
and
혹은 or
연산자를 사용 )before
if (anEmployee.seniority < 2) return 0;
if (anEmployee.monthsDisabled > 12) return 0;
if (anEmployee.isPartTime) return 0;
after
if (isNotEligibleForDisability()) return 0;
function isNotEligibleForDisability() {
return anEmployee.seniority < 2 || anEmployee.monthsDisabled > 12 || anEmployee.isPartTime;
}
조건문은 보통 두 가지 형태로 쓰인다.
if와 else절을 사용
한쪽만 정상이라면 비정상 조건을 if에서 검사한 다음, 조건이 참이면(비정상이면) 함수에서 빠져나온다. ( guard clause 보호 구문 )
함수의 진입점은 하나로 강제되지만, 반환점은 하나일수 도, 여러개 일 수도 있다.
before
function getPayAmount() {
let result;
if (isDead) result = deadAmount();
else {
if (isSeparated) result = separatedAmount();
else {
if (isRetired) result = retiredAmount();
else result = normalPayAmount();
}
}
return result;
}
after
function getPayAmount() {
if (isDead) return deadAmount();
if (isSeparated) return separatedAmount();
if (isRetired) return retiredAmount();
return normalPayAmount();
}
before
switch (bird.type) {
case '유럽 제비':
return '보통이다';
case '아프리카 제비':
return bird.numberOfCounts > 2 ? '지쳤다' : '보통이다';
case '노르웨이 파랑 앵무':
return bird.voltage > 100 ? '그을렸다' : '예쁘다';
default:
return '알 수 없다';
}
after
class EuropeanSwallow {
get plumage() {
return '보통이다';
}
// ...
}
class AfricanSwallow {
get plumage() {
return bird.numberOfCounts > 2 ? '지쳤다' : '보통이다';
}
// ...
}
class NorwegianBlueParrot {
get plumage() {
return bird.voltage > 100 ? '그을렸다' : '예쁘다';
}
// ...
}
before
if (aCustomer === '미확인 고객') customerName = '거주자';
after
class UnknownCustomer {
get name() {
return '거주자';
}
}
before
if (this.discountRate) base = base - this.discountRate * base;
after
assert(this.discountRate >= 0);
if (this.discountRate) base = base - this.discountRate * base;
before
for (const p of people) {
if (!found) {
if (p === '조커') {
sendAlert();
found = true;
}
// ...
}
}
after
for (const p of people) {
if (p === '조커') {
sendAlert();
break;
}
// ...
}