✕ BURUK Magic Numbers, tidak transparan
function getPrice(p, qty, isMember, day) {
let x = p * qty;
// apa itu 0.1? mengapa 0.05?
if(isMember == true) {
x = x - (x * 0.1);
}
if(qty > 10) {
x = x - (x * 0.05);
}
if(qty > 50) {
x = x - (x * 0.1);
}
if(day == 'friday' ||
day == 'saturday') {
x = x - (x * 0.15);
}
if(x < 0) x = 0;
return x;
// tidak tahu diskon apa yang berlaku
}
✓ BERSIH Named constants + return transparan
const DISCOUNT_RULES = {
MEMBER: 0.10, // 10% member
BULK_MEDIUM:0.05, // 5% qty 11–50
BULK_LARGE: 0.10, // 10% qty >50
WEEKEND: 0.15, // 15% jum-sab
};
function getApplicableDiscounts(
{isMember, quantity, dayOfWeek}) {
const discounts = [];
if(isMember)
discounts.push({
name: 'Diskon Member',
rate: DISCOUNT_RULES.MEMBER });
if(quantity > 50)
discounts.push({ name: 'Massal',
rate: DISCOUNT_RULES.BULK_LARGE });
else if(quantity > 10)
discounts.push({ name: 'Grosir',
rate: DISCOUNT_RULES.BULK_MEDIUM });
if(WEEKEND.has(dayOfWeek))
discounts.push({ name: 'Weekend',
rate: DISCOUNT_RULES.WEEKEND });
return discounts; // jelas & testable
}