如果提高可读性,是否可以接受冗余代码?

tal*_*ees 5 java coding-style

我有以下代码来检查游戏单元是玩家还是敌人.这是仅有的两个类别.我可以删除isEnemy方法并对敌人运行所有检查,就好像(!isPlayer),但我个人觉得如果(isEnemy)使代码的意图更清晰.是否有任何既定的编码风格可以说这种情况?

public boolean isPlayer(Unit unit) {
    return unit == player;
}

public boolean isEnemy(Unit unit) {
    for (Unit e : enemies) {
        if (unit.equals(e))
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 6

对于你的情况,你只有两种可能的状态 - 他们要么是敌人,要么是玩家.如果他们是一名球员,他们就不是敌人.最清楚的表达方式是!isPlayer.

如果您有其他可能的状态,那么您可能想要查看其他状态的某种枚举.

一般的经验法则是: 不要重复自己.如果您的代码的一部分更改了您已复制的(可能是为了修复错误),那么您必须更改该错误的每次出现.它可能变成维护噩梦.


Joe*_*Joe 3

我认为两种方法都可以接受。如果 isEnemy() == !isPlayer() 我会考虑将 isEnemy() 实现为:

public boolean isEnemy(Unit unit) {
  return !isPlayer(unit);
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以获得具有两个特定方法的可读性,但不必重复自己,就好像您可以调整 isPlayer() 并影响这两个方法一样。