什么是魔法值和解决方法

什么是魔法值和解决方法

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

魔法值是什么

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

例如:

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";

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

你可能感兴趣的:(java,java,后端,代码规范)