说几种常见方便的
1. 使用多态(面向对象)
// 优化前
function handleAnimal(animal) {
if (animal.type === 'dog') {
console.log('Woof!');
} else if (animal.type === 'cat') {
console.log('Meow!');
} else if (animal.type === 'bird') {
console.log('Chirp!');
}
}
// 优化后
class Animal {
speak() {
throw new Error('Method not implemented');
}
}
class Dog extends Animal {
speak() {
console.log('Woof!');
}
}
class Cat extends Animal {
speak() {
console.log('Meow!');
}
}
class Bird extends Animal {
speak() {
console.log('Chirp!');
}
}
const animals = [new Dog(), new Cat(), new Bird()];
animals.forEach(animal => animal.speak());
2. 使用策略模式
// 优化前
function calculatePrice(type, price) {
if (type === 'discount') {
return price * 0.9;
} else if (type === 'promotion') {
return price * 0.8;
} else {
return price;
}
}
// 优化后
const strategies = {
discount: price => price * 0.9,
promotion: price => price * 0.8,
default: price => price,
};
function calculatePrice(type, price) {
return (strategies[type] || strategies.default)(price);
}
3. 使用映射表(对象或字典)
// 优化前
function getStatusText(status) {
if (status === 1) {
return 'Pending';
} else if (status === 2) {
return 'Approved';
} else if (status === 3) {
return 'Rejected';
} else {
return 'Unknown';
}
}
// 优化后
const statusMap = {
1: 'Pending',
2: 'Approved',
3: 'Rejected',
};
function getStatusText(status) {
return statusMap[status] || 'Unknown';
}
4 使用三元运算符
对于简单的可以使用三目运算符
// 优化前
let result;
if (isSuccess) {
result = 'Success';
} else {
result = 'Failure';
}
// 优化后
const result = isSuccess ? 'Success' : 'Failure';
5. 使用函数式编程
通过函数组合、高阶函数等方式减少 if-else
。
// 优化前
function processData(data) {
if (data) {
if (data.isValid) {
return transform(data);
} else {
return 'Invalid data';
}
} else {
return 'No data';
}
}
// 优化后
const processData = data =>
!data
? 'No data'
: data.isValid
? transform(data)
: 'Invalid data';
6. 使用默认值和短路运算
-
利用逻辑运算符(
&&
、||
)和默认值来简化条件逻辑。
// 优化前
function getUserRole(user) {
if (user && user.role) {
return user.role;
} else {
return 'guest';
}
}
// 优化后
function getUserRole(user) {
return user?.role || 'guest';
}
7. 使用状态机
-
对于复杂的状态逻辑,可以使用状态机来替代
if-else
。
// 优化前
function handleState(state) {
if (state === 'idle') {
console.log('Start processing');
} else if (state === 'processing') {
console.log('Processing...');
} else if (state === 'done') {
console.log('Done!');
}
}
// 优化后
const stateMachine = {
idle: () => console.log('Start processing'),
processing: () => console.log('Processing...'),
done: () => console.log('Done!'),
};
function handleState(state) {
stateMachine[state]?.();
}