什么是魔法值和解决方法

什么是魔法值和解决方法

最近提交代码的时候,项目经理告诉我,根据阿里规约,要避免魔法值。其实我当时不是很清楚魔法值的概念,特此了解一下,也记录一下我的代码不规范。

魔法值是什么

所谓魔法值,是代码中莫名其妙出现的数字,数字意义必须通过阅读其他代码才能推断出来,这样给后期维护或者其他人员阅读代码,带来了极大不便。

例如:

if( flag = 5 ){
	a = 2;
}else{
    a = 3;
}

当其他人员阅读时就会引起深深的疑问:为什么flag=5时做这个?flag=5背后隐藏着什么秘密?flag=5意味着什么? 如果时间久,原开发人员也要重新看代码才能明白当时的深意,这就大大增加了二次开发和维护时的难度。

我的错误

原代码如下:

// 遍历查询出的审查人对象集合
        for(AuditPersonInfoDTO adp : auditPersonInfoDTO){
            // 判断审查结果是否为空
            if(adp.getStatus()!=null){
                // 设置审查状态,status为2代表审核通过,为3代表退回修改
                switch (adp.getStatus()){
                    case "2" :
                        adp.setStatus("审查通过");
                        break;
                    case "3" :
                        adp.setStatus("退回修改");
                        break;
                    default:
                        adp.setStatus("暂未审查");
                }
            }else {
                // 设置状态为空
                adp.setStatus("");
            }
            // 将处理后的对象放入集合
            adpList.add(adp);
        }

这里的 case “2” 、 case “3”,在阅读代码前,没人清楚其代表意义 。于是这里就出现了两个魔法值。

现代码:

// 遍历查询出的审查人对象集合
        for(AuditPersonInfoDTO adp : auditPersonInfoDTO){
            // 判断审查结果是否为空
            if(adp.getStatus()!=null){
                // 设置审查状态,status为2代表审核通过,为3代表退回修改
                switch (adp.getStatus()){
                    case PASS_SUCCESS :
                        adp.setStatus("审查通过");
                        break;
                    case PASS_FAIL :
                        adp.setStatus("退回修改");
                        break;
                    default:
                        adp.setStatus("暂未审查");
                }
            }else {
                // 设置状态为空
                adp.setStatus("");
            }
            // 将处理后的对象放入集合
            adpList.add(adp);
        }

定义常量:

    /**
     * 审核通过
     */
    public static final String PASS_SUCCESS = "2";
    /**
     * 审核未通过
     */
    public static final String PASS_FAIL = "3";

这样的话,通过常量名就可以基本清楚此处的基本逻辑和代表意义。而且方便了后期修改,只需要修改一处即可。

  • 31
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值