💡 이 내용은 유튜브를 보고 정리한 내용입니다.
단계별로 임의대로 초보 / 주니어 / 시니어라고 칭했습니다...
🚫 시니어가 보기에 별거 아닐 수도 있음 주의
조건
function toAccounting(n) {
if (n < 0) {
return '(' + Math.abs(n) + ')';
} else if (n >= 0) {
return n;
}
}
console.log(toAccounting(0));
console.log(toAccounting(10));
console.log(toAccounting(-5));
n
과 같은 모호한 변수명을 사용toAccounting
와 같은 모호한, 목적이 불명확한 함수명if
조건문 반복 사용if(n < 0)
을 걸렀다면 자연히 남은 건 n >= 0
인데 굳이 필요없는 else if
사용함undefined
또는 null
이 올 수 있다는 점을 생각 안함. 그래서 오류가 발생console.log(toAccounting(undefined)); // 오류 발생
function numberToAccountingString(number) {
if (number != null) {
if (number < 0) {
return `(${Math.abs(number)})`;
} else {
return number.toString();
}
}
}
number != null
으로 매개변수가 undefined
일때 undefined
을 그대로 반환 가능typeof number === 'number'
로 걸러내는게 좋지않나?대부분의 사람들은 주니어의 코드에서 멈출 수 있다.
엄청 나쁘고 읽기 힘든 게 아니니까.
하지만 진정한 프로라면 한발 더 나아간 클린코드를 작성 할 것이다.
function numberToAccountingString(number) {
if (number == null) return;
if (number < 0) return `(${Math.abs(number)})`;
return number.toString();
}
조건
function cacluateTotal(items, options) {
let t = 0;
items.forEach((i) => {
t += i.price * i.quan;
});
t = t - t * (options.dis || 0);
t = t * 1.1;
t = t + (options.ship || 5);
return t;
}
const testItems = [
{ price: 15, quan: 2 },
{ price: 20, quan: 1 },
{ price: 5, quan: 4 },
];
console.log(cacluateTotal());
console.log(cacluateTotal(testItems));
console.log(cacluateTotal(testItems, { ship: 0 }));
console.log(cacluateTotal(testItems, { dis: 0.75 }));
console.log(cacluateTotal(testItems, { ship: 12 }));
t
, quan
, dis
...t * 1.1
에서 1.1
의 의미undefined
,null
에 대한 대비가 없다.||
을 사용하여, ship(배송비)이 0 이어도 5를 반환한다.console.log(cacluateTotal([], {}); // 5
const TAX_RATE = 1.1;
const SHIPPING_DEFUALT = 5;
function cacluateTotal(items, options = {}) {
if (items == null || items.length === 0) return 0;
let total = 0;
items.forEach((item) => {
total += item.price * item.quantity;
});
total = total - total * (options.discount || 0);
total = totla * TAX_RATE;
if (options.shipping !== 0) {
total = total + (options.shipping || SHIPPING_DEFUALT);
}
return total;
}
const testItems = [
{ price: 15, quantity: 2 },
{ price: 20, quantity: 1 },
{ price: 5, quantity: 4 },
];
TAX_RATE
, SHIPPING_DEFUALT
null
이거나 없을때 {}
를 대비했다.const TAX_RATE = 1.1;
const SHIPPING_DEFUALT = 5;
function cacluateTotal(
items,
{ shipping = SHIPPING_DEFUALT, discount = 0 } = {}
) {
if (items == null || items.length == 0) return null;
const itemCost = items.reduce((total, item) => {
return total + item.price * item.quantity;
}, 0);
const discountRate = 1 - discount;
return itemCost * discountRate * TAX_RATE + shipping;
}
function cacluateTotal(
items,
{ shipping = SHIPPING_DEFUALT, discount = 0 } = {}
)
{} = {}
와 같이 대비했다.forEach
가 아닌 reduce
를 사용하여 하나의 값을 반환하도록 했다.초보자와 주니어의 차이는 아주 작다. 조금만 신경을 써도 충분히 작성 가능하다!
보통은 첫작성시엔 초보-주니어의 사이에 있는 코드를 작성한다.
그러니 시간이 날 때마다 리팩토링 하는 연습을 해보자.
이제 클린코드는 어떤 생각을 하며 짜야하는지 알았으니 주의해보자 ✏️
테스트 케이스를 다양하게 만들어서 버그에 대비하자