什么是魔法值和解决方法

您所在的位置:网站首页 魔法是什么软件 什么是魔法值和解决方法

什么是魔法值和解决方法

2023-12-19 18:56| 来源: 网络整理| 查看: 265

什么是魔法值和解决方法

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

魔法值是什么

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

例如:

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

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3