💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 在条件式的每个分支上有着相同的一段代码。 将这段重复代码搬移到条件式之外。 ~~~ if (isSpecialDeal()) { total = price * 0.95; send(); } else { total = price * 0.98; send(); } ~~~ => ~~~ if (isSpecialDeal()) total = price * 0.95; else total = price * 0.98; send(); ~~~ **动机(Motivation)** 有时你会发现,一组条件式的所有分支都执行了相同的某段代码。如果是这样,你就应该将这段代码搬移到条件式外面。这样,代码才能更清楚地表明哪些东西随条件的变化而变化、哪些东西保持不变。 **作法(Mechanics)** - 鉴别出「执行方式不随条件变化而变化」的代码。 - 如果这些共通代码位于条件式起始处,就将它移到条件式之前。 - 如果这些共通代码位于条件式尾端,就将它移到条件式之后。 - 如果这些共通代码位于条件式中段,就需要观察共通代码之前或之后的代码 是否改变了什么东西。如果的确有所改变,应该首先将共通代码向前或向后 移动,移至条件式的起始处或尾端,再以前面所说的办法来处理。 - 如果共通代码不止一条语句,你应该首先使用以Extract Method 将共通 代码提炼到一个独立函数中,再以前面所说的办法来处理。 **范例:(Example)** 你可能遇到这样的代码: ~~~ if (isSpecialDeal()) { total = price * 0.95; send(); } else { total = price * 0.98; send(); } ~~~ 由于条件式的两个分支都执行了 send() 函数,所以我应该将send() 移到条件式的外围: ~~~ if (isSpecialDeal()) total = price * 0.95; else total = price * 0.98; send(); ~~~ 我们也可以使用同样的手法来对待异常(exceptions)。如果在try 区段内「可能引发异常」的语句之后,以及所有catch 区段之内,都重复执行了同一段代码,我就 可以将这段重复代码移到final 区段。