아래 내용은 리팩터링 2판 내용과 한달한권 읽기 강의를 기반하여 정리한 글입니다.
API란?
//전
function getTotalOutstandingAndSendBill() {
const result = customer.invoices.reduce( (total, each) => each.amount + total, 0));
sendBill();
return result;
}
//후
function getTotalOutstandingAndSendBill() {
const result = customer.invoices.reduce( (total, each) => each.amount + total, 0));
}
function sendBill() {
emailGateway.send(formatBill(customer));
}
//전
function tenPercentRaise(aPerson) {
aPerson.salary = aPerson.salary.multiply(1.1);
}
function fivePercentRaise(aPerson) {
aPerson.salary = aPerson.salary.multiply(1.05);
}
//후
function raise(aPerson, factor) {
aPerson.salary = aPerson.salary.multiply(1 + factor);
}
//전
function setDimension(name, value) {
if (name === "height) {
this._height = value;
return;
}
if (name === "width") {
this._width = value;
return;
}
}
//후
function setHeight(value) {
this._height =value;
}
function setWidth(value) {
this._width = value;
}
//전
const low = aRoom.daysTempRange.low;
const high = aRoom.daysTempRange.high;
if (aPlan.withinRange(low, high))
//후
if (aPlan.withinRange(aRoom.daysTempRange)))
//전
availableVacation (anEmployee, anEmployee.grade);
function availableVacation (anEmployee, grade) {
// 연휴계산..
}
//후
availableVacation(anEmployee)
function availableVacation(anEmployee) {
const grade = anEmployee.grade
// 연휴계산..
}
//전
targetTemperature(aPlan)
function targetTemperature(aPlan) {
currentTemperature = thermostat.currentTemperature;
//생략
}
//후
targetTemperature(aPlan, thermostat.currentTemperature)
function targetTemperature(aPlan, currentTemperature) {
//생략
}
//전
class Person {
get name() {...}
set name(aString) {...}
}
//후
class Person {
get name() {...}
}
//전
leadEngineer = new Employee(document.leadEngineer, 'E');
//후
leadEngineer = createEngineer(document.leadEngineer);
//전
function score(candidate, medicalExam, scoringGuide) {
let result = 0;
let healthLevel = 0;
// 긴 코드 생략
}
//후
class Scorer {
constructor(candidate, medicalExam, scoringGuide) {
this._cadidate = candidate;
this._medicalExam = medicalExam;
this._scoringGuide = scoringGuide;
}
excute() {
this._result = 0;
this._healthLevel = 0;
//긴 코드 생략
}
}
//전
class ChargeCalculator {
constructor(customer, usage) {
this._customer = customer;
this._usage = usage;
}
execute() {
return this._customer.rate * this._usage;
}
}
//후
function charge(customer, usage) {
return customer.rate * usage;
}
//전
let totalAscent = 0;
calculateAscent();
function calculateAscent() {
for (let i = 1; i < points.length; i++) {
const verticalChange = points[i].elevation - points[i-1].elevation;
totalAscent += (verticalChange > 0) ? verticalChange : 0;
}
}
//후
const totalAscent = calculateAscent();
function calculateAscent() {
let result = 0;
for (let i = 1; i < points.length; i++) {
const verticalChange = points[i].elevation - points[i-1].elevation;
result += (verticalChange > 0) ? verticalChange : 0;
}
return result;
}
//전
if (data)
return new ShippinRules(data);
else
return -23
//후
if (data)
return new ShippingRules(data);
else
throw new OrderProcessingError(-23);
//전
double getValueForPeriod (int periodNumber) {
try {
return values[periodNumber]
} catch (ArrayIndexOutOfBoundsException e) {
return 0;
}
}
//후
double getValueForPeriod (int periodNumber) {
return (periodNumber >= values.length) ? 0 : values[periodNumber];
}