반대: 함수 인라인 하기(Inline Function)
function printOwing(invoice) {
let outstanding = 0;
console.log("--고객채무--");
// 미해결 채무(outstanding)를 계산한다.
for (const o of invoice.order) {
outstanding += o.amount;
}
// 마감일(duedate)를 기록한다.
const today = Clock.today;
invoice.dueDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() + 30
);
// 세부 사항 출력
console.log(`고객명: ${invoice.customer}`);
console.log(`채무액: ${outstanding}`);
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`);
}
function printOwing(invoice) {
let outstanding = 0;
printBanner(); // 배너 출력 로직을 분리
// 미해결 채무(outstanding)를 계산한다.
for (const o of invoice.order) {
outstanding += o.amount;
}
// 마감일(duedate)를 기록한다.
const today = Clock.today;
invoice.dueDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() + 30
);
// 세부 사항 출력
console.log(`고객명: ${invoice.customer}`);
console.log(`채무액: ${outstanding}`);
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`);
}
function printBanner() {
console.log("--고객채무--");
}
// 2차 함수추출 : 세부사항 출력코드도 분리
function printOwing(invoice) {
let outstanding = 0;
printBanner(); // 배너 출력 로직을 분리
// 미해결 채무(outstanding)를 계산한다.
for (const o of invoice.order) {
outstanding += o.amount;
}
// 마감일(duedate)를 기록한다.
const today = Clock.today;
invoice.dueDate = new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() + 30
);
printDetails();
// 세부 사항 출력
}
function printDetails() {
console.log(`고객명: ${invoice.customer}`);
console.log(`채무액: ${outstanding}`);
console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`);
}
반대: 함수 추출하기
function rating(aDiver) {
return moreThanFiveLateDeliveries(aDriver) ? 2 : 1;
}
function moreThanFiveLateDeliveries(aDriver) {
return aDriver.numberOfLateDeliveries > 5;
}
// 수정
function rating(aDriver) {
return aDriver.numberOfLateDeliveries > 5 ? 2 : 1;
}
표현식이 복잡할때 지역변수를 사용하면 표현식을 쉽게 관리할 수 있고 코드의 목적을 드러낸다.
function price(order) {
// 가격 = 기본가격 - 수량할인 + 배송비
return (
order.quantity * order.itemPrice -
Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 +
Math.min(order.quantity * order.itemPrice * 0.1, 100)
);
}
// 수정후
function price(order) {
const basePrice = order.quantity * order.itemPrice;
const quantityDiscount =
Math.max(0, order.quantity - 500) * order.itemPrice * 0.05;
const shipping = Math.min(basePrice * 0.1, 100);
return basPrice - quantity.Discount + shipping;
}