
Extract Method)if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))
charge = quantity * plan.summerRate;
else
charge = quantity * plan.regularRate + plan.regularServiceCharge;if (summer())
charge = summerCharge();
else
charge = regularCharge();Consolidate Conditional Expression
Separate Query from Modifier)를 먼저 적용한다.Extract Method)할지 고려해본다.if (anEmployee.seniority < 2) return 0;
if (anEmployee.monthsDisabled > 12) return 0;
if (anEmployee.isPartTime) return 0;if (isNotEligibleForDisability()) return 0;
function isNotEligibleForDisability() {
return ((anEmployee.seniority < 2)
|| (anEmployee.monthsDisabled > 12)
|| (anEmployee.isPartTime));
}Replace Nested Conditional with Guard Clauses
Consolidate Conditional Expression)function getPayAmount() {
let result;
if (isDead)
result = deadAmount();
else {
if (isSeparated)
result = separatedAmount();
else {
if (isRetired)
result = retiredAmount();
else
result = normalPayAmount();
}
}
return result;
}function getPayAmount() {
if (isDead) return deadAmount();
if (isSeparated) return separatedAmount();
if (isRetired) return retiredAmount();
return normalPayAmount();
}Replace Conditional with Polymorphism
Extract Method)switch (bird.type) {
case 'EuropeanSwallow':
return "average";
case 'AfricanSwallow':
return (bird.numberOfCoconuts > 2) ? "tired" : "average";
case 'NorwegianBlueParrot':
return (bird.voltage > 100) ? "scorched" : "beautiful";
default:
return "unknown";class EuropeanSwallow {
get plumage() {
return "average";
}
class AfricanSwallow {
get plumage() {
return (this.numberOfCoconuts > 2) ? "tired" : "average";
}
class NorwegianBlueParrot {
get plumage() {
return (this.voltage > 100) ? "scorched" : "beautiful";
}if (aCustomer === "unknown") customerName = "occupant";class UnknownCustomer {
get name() {return "occupant";}if (this.discountRate)
base = base - (this.discountRate * base);assert(this.discountRate >= 0);
if (this.discountRate)
base = base - (this.discountRate * base);Replace Control Flag with Break
return, break, continuefor (const p of people) {
if (!found) {
if (p === "Don") {
sendAlert();
found = true;
}for (const p of people) {
if (p === "Don") {
sendAlert();
break;
}