任务6:修复缺陷
如果你发现isGettingOutOfPenaltyBox
变量似乎没法简单消除,尝试直接使用player
上的isInPenaltyBox
变量时却怎么也会挂掉测试……那就对了。这里其实有个 bug。
我们前面做的重构其实是“帮助理解的重构”。这样的重构并不需要你真正理解代码的逻辑,依靠测试和严格地遵循重构手法,你同样能得到等价的代码,但拥有更好的结构,以帮助你更好地看清代码的意图,进而更容易做出修改。这就像擦去玻璃上的灰尘,往往能使你看见更多的风景。重构之后,有时你便能更容易看见以往难以发现的深层次设计问题——当重构完代码,我们看到这段代码(如此清晰)时,甚至会忍不住惊讶:
回答正确的时候先设置了nextPlayer
再增加金币,那不就是把金币奖给了下一位玩家吗?没道理啊。
好在这个 bug 的修复方式就跟代码一样直观:看起来调换一下两行代码顺序就可以了。
不过,这里还有另外一个 bug 就没那么简单了:进入惩罚区的玩家不应该再回答问题。
除了要把 bug 修好,你还需要思考一下,发生 bug 的原因是什么,怎么样能在代码层面更好地避免同类问题再发生。
这节课的任务,就是修复一下项目里现存的几个 bug。
你的任务
Java:
JavaScript:
修复 bug:金币被奖励给了错误的玩家
修复 bug:进入惩罚区的玩家不应该再回答问题
移除
isGettingOutOfPenaltyBox
变量
参考资料
《重构 2》2.4 何时重构
Last updated