清理 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;
}
你现在需要的是将 large if 分支抽象成一个方法。
如果您使用 Intellij IDEA,您可以 select 一些代码和 extract method 这将自动创建一个具有正确参数的方法。
然后,您为该方法指定一个描述性名称,以便其他人可以只查看方法调用并弄清楚该方法将做什么。
Martin Fowler 博客中的模式 Specification 可以帮助您。
此外,我认为您应该阅读 Robert C. Martin 的 Clean code 的前 100 页。
它会解释所有你必须知道的来制作更可靠的代码。
此方法过滤帧分数并添加它。已经改进了我能做的,但在我看来,还有可能改进得更多,但我不知道如何改进。有什么想法吗?
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;
}
你现在需要的是将 large if 分支抽象成一个方法。
如果您使用 Intellij IDEA,您可以 select 一些代码和 extract method 这将自动创建一个具有正确参数的方法。
然后,您为该方法指定一个描述性名称,以便其他人可以只查看方法调用并弄清楚该方法将做什么。
Martin Fowler 博客中的模式 Specification 可以帮助您。
此外,我认为您应该阅读 Robert C. Martin 的 Clean code 的前 100 页。
它会解释所有你必须知道的来制作更可靠的代码。