> For the complete documentation index, see [llms.txt](https://ethan-lin.gitbook.io/refactoring/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ethan-lin.gitbook.io/refactoring/bugszero/4-task-2.md).

# 任务2：消除重复代码

这道题的坏味道其实不少，把第三章的坏味道怼上去一对比，就发现至少有这么几种坏味道：

* 重复代码 - 有许多取值函数的重复、甚至还有一些代码重复
* 过大的类 - 无论如何，180 行的类还是太大了
* 依恋情结
* 基本类型偏执

我们从哪里开始呢？总是要从最简单的地方开始，下手处理这个过大的类现在看来似乎还没有很明确的方向，也许先行处理重复代码是不错的方向。一来收敛重复的代码可能简化未来的重构，二来提炼出重复代码后，我们可能更容易看见其他的一些坏味道。

提醒一下，重复代码这件事，也可以让 IDE 给你一点提示。

## 你的任务

Java：

```
git checkout task-2-eliminate-some-duplication
cd java && ./gradlew clean build
```

JavaScript：

```
git checkout task-2-eliminate-some-duplication
cd javascript && npm test
```

* 找出代码中存在重复的代码，消除这些重复代码
* 查看提炼后的代码，看看是否能给它们（函数、变量）更好的命名

## 反思

* 你用什么手法来消除重复代码？
* 消除完重复代码以后，有没有新的坏味道浮现出来？
