温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java开发为什么不允许魔法值出现在代码中

发布时间:2022-01-05 09:57:09 来源:亿速云 阅读:241 作者:iii 栏目:大数据

本篇内容介绍了“Java开发为什么不允许魔法值出现在代码中”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

静态常量取代魔法值

像下面这个例子:

if (billCount > 75) {    //todo} else {    //todo}

如果在不了解这块的业务的同事,在读到这块代码的时候,可能会想,75 是什么鬼,为啥和这个数比较,背后深藏着什么秘密吗?可能只有当时的开发人员记得了,导致代码可读性和可维护性极差。

如果声明一个常量,来替换该魔法值,可能就会使代码的可读性和可维护性大大增加。

static final Integer BASIC_BILL_COUNT = 75;

还有些魔法表达式,比如:

if (value > 60 && value <= 80 && type = 1) {    // todo}

比如这个表达式是表示状态为正常且项目活跃,就可以定义:

boolean isActiveProject = value > 60 && value <= 80 && type = 1;

这样是不是可读性就提高了,一眼就可以看出来这块代码的逻辑。

枚举类取代魔法值

还有一种消除魔法值的方式是使用枚举类代替,下面让我们举个例子:

if (eventId == 1) {    System.out.println("睡觉");} else if (eventId == 2) {    System.out.println("吃饭");} else if (eventId == 3) {    System.out.println("打豆豆");}

如上代码是针对事件 id 去执行相应的事件,如果事件比较少,大家还可以勉强记住每个 eventId 对应的含义,但是随着事件 id 的增多,很可能会发生,新来的员工把事件 id 给搞混了,导致执行错误的事件,发生 bug。

那么我们可以使用枚举类来表示相应的事件:

public enum EventEnum {
   /**     * 睡觉     */    SLEEP_EVENT(1, "睡觉"),
   /**     * 吃饭     */    EAT_EVENT(2, "吃饭"),
   /**     * 打豆豆     */    FIGHT_PEA_EVENT(3, "打豆豆");
   private int eventId;    private String desc;
   EventEnum(int eventId, String desc) {        this.eventId = eventId;        this.desc = desc;    }
   public int getEventId() {        return eventId;    }
   public String getDesc() {        return desc;    }}

修改完之后的代码如下:

if (eventId == EventEnum.SLEEP_EVENT.getEventId()) {    System.out.println("睡觉");} else if (eventId == EventEnum.EAT_EVENT.getEventId()) {    System.out.println("吃饭");} else if (eventId == EventEnum.FIGHT_PEA_EVENT.getEventId()) {    System.out.println("打豆豆");}

是不是可读性急剧提升,还不快看看自己代码中有没有这样的魔法值出现,有的话赶紧改造起来。

还有如果你需要在不同的地点引用同一数值,魔法数会让你烦恼不已,因为一旦这些数字发生改变,就必须在程序中找到所有的魔法值,并将它们全部修改一遍,这样就太费时费力了。

其实不只是 Java 不应该在代码中使用魔法值,其他语言亦是如此。

“Java开发为什么不允许魔法值出现在代码中”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI