条件分支简化
// 打印错误日志的一个demo// 为啥这个需要重构?我咋感觉还挺不错的。。。。// 怎么简化?{if (user_result == SUCCESS) {if (permission_result != SUCCESS) {reply.WriteErrors('error reading permission');reply.Done();// 失败了就没必要往下了return;}reply.WriteErrors('') // 可以不打印吗}else {reply.WriteErrors(user_result)}reply.Done();}// 嵌套的条件判断扁平化 一般是将最少情况的分支放在最前{if (user_result != SUCCESS ) {reply.WriteErrors(user_result)}// 成功 但 没有权限else if (permission_result != SUCCESS) {reply.WriteErrors('error reading permission');}// 成功else {reply.WriteErrors('')}reply.Done();}// 提前返回{if (user_result != SUCCESS ) {reply.WriteErrors(user_result)reply.Done();return ;}// 能到这一步代表 user_result 是成功的if (permission_result != SUCCESS) {reply.WriteErrors('error reading permission');reply.Done();return ;}reply.WriteErrors('')reply.Done();}
投票
点赞点踩的计分功能,一篇文章对同一个用户有三种状态:已被点赞、已被点踩、无,三种形态互斥
点赞+1,点踩-1,无
现在响应用户的动作对文章进行计分,已知oldvote和newvote
第一版代码:
function vote_change(oldvote,newvote) {let score = get_score();if (newvote != oldvote) {if (newvote == 'up') {score += (oldvote == 'down'?2:1);}else if (newvote == 'down') {score -= (oldvote == 'up'?2:1);}else if (newvote == ''){score += (oldvote == 'up'?-1:1);}}set_score(score);}
代码存在的问题:
1、使用的相对计分,严重依赖于old与new之间的联系
2、2,1,-1等存在耦合,应该单独计算出来
// 拆分:投票计分值 + 改变计分算法function vote_change(oldvote,newvote) {let score = get_score();score -= vote_value(oldvote);score += vote_value(newvote);set_score(score);function vote_value(vote) {if (vote === 'down') return -1;if (vote === 'up') return 1;return 0;}}

