繁体   English   中英

清理 java 代码,多个 else if 语句

[英]Cleaning up java code, multiple else if statements

此方法过滤帧分数并添加它。 已经改进了我所能做的,但在我看来,还有可能改进得更多,但我不知道如何改进。 有任何想法吗?

 public boolean addFramePinsDown(int player, Frame frame) {
   
    if (game.getPlayersList().size() > player) {
        if (game.getPlayersList().get(player).getFrame() < BowlingEnum.MAX_FRAMES.getValue()) {
            if (frame.getThirdRoll() == 0) {
                if (frame.getFirstRoll() + frame.getSecondRoll() <= BowlingEnum.MAX_PINS.getValue()) {
                    addAndCountFrames(player, frame);
                    return true;
                }
            }
        } else if (game.getPlayersList().get(player).getFrame() == BowlingEnum.MAX_FRAMES.getValue()) {
            if (frame.getFirstRoll() == 10) {
                if (frame.getSecondRoll() == 10 && frame.getThirdRoll() <= BowlingEnum.MAX_PINS.getValue()) {
                    addAndCountFrames(player, frame);
                    return true;
                } else if (frame.getSecondRoll() < BowlingEnum.MAX_PINS.getValue() && frame.getThirdRoll() == 0) {
                    addAndCountFrames(player, frame);
                    return true;
                }
            } else if (frame.getSecondRoll() == BowlingEnum.MAX_PINS.getValue() &&
                    frame.getThirdRoll() <= BowlingEnum.MAX_PINS.getValue()) {
                addAndCountFrames(player, frame);
                return true;
            } else if(frame.getFirstRoll() + frame.getSecondRoll() == BowlingEnum.MAX_PINS.getValue() &&
                    frame.getThirdRoll() <= BowlingEnum.MAX_PINS.getValue()){
                addAndCountFrames(player, frame);
                return true;
            } else if (frame.getFirstRoll() + frame.getSecondRoll() < BowlingEnum.MAX_PINS.getValue() &&
                    frame.getThirdRoll() == 0) {
                addAndCountFrames(player, frame);
                return true;
            }
        }
    }
    return false;
}

您现在需要的是将大型 if 分支抽象为方法。

如果您使用 Intellij IDEA,您可以 select 一些代码和提取方法,它将自动创建具有正确参数的方法。

然后,你给那个方法一个描述性的名字,这样别人就可以看到方法调用并弄清楚那个方法会做什么。

Martin Fowler 博客中的模式规范可以帮助您。

另外,我认为你应该阅读 Robert C 的Clean code的前 100 页。 马丁。

它将解释制作更易懂的代码所必须知道的一切。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM