5 个可以替代 if-else 的代码优化技巧

技巧一:使用三元运算符

优化前:

let statusText;
if (isOnline) {
  statusText = '在线';
} else {
  statusText = '离线';
}

优化后:

const statusText = isOnline ? '在线' : '离线';

优点:代码极其简洁,可读性强,将一个简单的逻辑判断和赋值操作浓缩到一行。

技巧二:使用 Map 或对象字面量进行映射function getStatusMessage(status) {

优化前:

  if (status === 'success') {
    return '操作成功';
  } else if (status === 'error') {
    return '发生错误';
  } else if (status === 'pending') {
    return '处理中...';
  } else {
    return '未知状态';
  }
}

优化后:

const statusMessages={
	success:  "操作成功",
	error: "发生错误 ",
	pending: "处理中",
}
function getStatusMessage(status){
	// 使用||提供一个默认值
	return statusMessages[status] || '未知状态'
}

优点:

  • 可读性高:逻辑关系一目了然,就像查字典一样
  • 易于扩展:新增一个状态时,只需在 statusMessages 对象中增加一个键值对即可

技巧三:使用策略模式(函数映射)

优化前:

function handleApiResponse(response) {
  if (response.code === 200) {
    handleSuccess(response.data);
  } else if (response.code === 401) {
    redirectToLogin();
  } else if (response.code === 404) {
    showNotFoundPage();
  } else {
    showGenericError();
  }
}

优化后:

const statusActions ={
	200:handleSuccess,
	401:redirectToLogin,
	404:showNotFoundPage,
	default:showGenericError,
}
fuction handleapiResponse(response) {
	// 查找对应的处理函数|默认函数
	const action =statusActions[response.code] || statusActions.default;
	action(response.data);//执行函数
}

优点:将“条件判断”和“具体执行”解耦。每个操作都是一个独立的函数,职责清晰,代码结构更加模块化和可测试。

技巧四:善用短路运算符 (&&, ||, ??)

1. 使用 && 替代简单的 if

优化前:

if (isDebugMode) {
  console.log('这是一条调试信息');
}

优化后:

isDebugMode && console.log('这是一条调试信息');

原理:&& 运算符只有在左侧表达式为真(truthy)时,才会执行并返回右侧的表达式。

2. 使用 || 或 ?? 提供默认值

场景:获取一个可能不存在的用户名,如果不存在,则显示“游客”。

优化前:

let displayName;
if (user.name) {
  displayName = user.name;
} else {
  displayName = '游客';
}

优化后:

// 使用||(逻辑或)
const displayName=user.name || '游客';

//更推荐使用 ??(空值合并运算符)
const displayNameWithNullish=user.name ?? '游客

注意 || 和 ?? 的区别:

  • || 会将所有“假值”(false, 0, ‘’, null, undefined, NaN) 都替换为默认值
  • ?? 只会将 null 和 undefined 替换为默认值。如果你希望保留 0 或空字符串 ‘’ 这样的有效值,?? 是更安全的选择

技巧五:使用规则数组

场景:根据订单金额,计算不同的折扣率。

优化前:

function getDiscount(orderAmount) {
  if (orderAmount >= 500) {
    return 0.2; // 20% 折扣
  } else if (orderAmount >= 200) {
    return 0.1; // 10% 折扣
  } else if (orderAmount >= 100) {
    return 0.05; // 5% 折扣
  } else {
    return 0;
  }
}

优化后:

const discountRules = [
  { condition: amount => amount >= 500, discount: 0.2 },
  { condition: amount => amount >= 200, discount: 0.1 },
  { condition: amount => amount >= 100, discount: 0.05 },
];

function getDiscount(orderAmount) {
  // 查找第一个满足条件的规则
  const rule = discountRules.find(r => r.condition(orderAmount));
  return rule ? rule.discount : 0;
}

优点:

  • 声明式:代码从“如何做”变成了“是什么”。定义一系列规则,然后让程序自己去匹配
  • 极易扩展:新增一个折扣档位,只需在 discountRules 数组的最前面加一个对象即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41521625

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值