我的代码审查实践(25分钟看完系列)

阅读前

  1. 阅读这篇文章后你能学到什么?

我的代码审查实践

  1. 你将用多少时间来阅读这篇文章?

25 分钟

目标

  • 分享知识
  • 提高代码的可读性

例子

一般错误

不必要的额外的逻辑层
  function getUserAccount(){
   if(Auth.isLogin()){
     return Auth::user();
   }else{
     throw Error('get user when user is not authorized')
   }
  }

错误

  • 程序员需要额外的一层才能知道程序会抛出异常如果用户不满意
  function getUserAccount(){
  if(!Auth.isLogin()){
    throw Error('get user when user is not authorized')    
  }
    return Auth::user();
  }

改进

  • 程序员知道调用者必须确保用户需要确保用户需要登录才能正确地调用**这个功能
Retrieve array of items from indexed data object when already have indexed keys
function getUsers(usersById,targetUserIds){
  return _.filter(usersById, user =>
    targetUserIds.includes(
      user.id
    )
  );
}

错误

  • low performance and readability
function getUsers(usersById,targetUserIds){
  return targetUserIds.map(targetUserId=>usersById[targetUserId])
}

改进

  • better performance and readability
Unnecessary extra logic layer when processing overloading function
  function getUser(idOrIds){
    let relatedUser;
    let predefinedUsers = [
      {"name":"jeff",age:"20",id:"id1"},
      {"name":"mandy",age:"20",id:"id2"},


    ];
     if(Array.isArray(idOrIds)){
       return  predefinedUsers.filter(user=>idOrIds.includes(user.id));
     }else{
       return  predefinedUsers.filter(user=>user.id==idOrIds);
     }
  }

错误

  • Should seperation the type conversion and only have one process logic

改进

  function getUser(idOrIds){
    let relatedUser;
    let predefinedUsers = [
      {"name":"jeff",age:"20",id:"id1"},
      {"name":"mandy",age:"20",id:"id2"},


    ];
     if(!Array.isArray(idOrIds)){
       idOrIds = [idOrIds];
     }
    //One processing logic only
     let results =   predefinedUsers.filter(user=>idOrIds.includes(user.id));

     if(Array.isArray(idOrIds)){
      return results;
     }else{
       return results[0];
     }

  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值