有时比较非常简单,equals,compareTo,......作为下一个:
//Status is a String, and
if(status.equals(StatusEnum.ACTIVE.value()) && dateRegister.isAfter(LocalDate.now)){
//do something
} else {
//do something
}
但我更喜欢创建一个具有更具描述性名称的方法,尽管我只使用过一次:
private boolean isActive(String status){
return status.equals(StatusEnum.ACTIVE.value()) && dateRegister.isAfter(LocalDate.now);
}
然后:
if(isActive(status)){
//do something
} else {
//do something
}
为这种简单的比较创建方法是一个好主意还是实践?
有时我觉得我创造了很多提高可读性的方法,而且有些人不喜欢太多......
答案 0 :(得分:1)
当然,你在这里提出的是更好的风格。您正在练习的是清洁代码的一个重要方面。这实际上是一种很棒的做法。
背后的推理:你的大脑会自动花时间在"创造背景"。这意味着:当您查看源代码时,您会立即开始寻找帮助您了解正在发生的事情的边界。
从这个意义上说,这种检查的一个小辅助方法(有一个好名字!)可以让你的大脑几乎立即掌握正在发生的事情。
不习惯这种风格的人最初经常拒绝它。但问题是:当你要求他们阅读这些代码时,他们通常会发现容易来阅读;虽然他们练习的风格不同。他们不喜欢他们看到的东西,但是阅读它们没有问题!
将其与反向实验进行比较:当您开始阅读时,他们的"代码,在他们的风格...你很快发现他们的代码更难阅读。其他人也是如此。因为你的大脑必须处理“减少”#34;输入。情况变得更糟:当人们习惯于读/写其他不太可读的风格时...经常发生的事情是他们训练他们的大脑忽略这样的结构。换句话说:他们接受“糟糕的风格”#34; ...因为他们受过训练而看起来不太紧密。说真的,还有什么比这更糟糕的?
是的,最后你甚至可能会有一些"更多"代码阅读;但它结构如此精美的事实仍然意味着:最终的努力减少了。
当然,这里的副作用是:如果你不将这些代码放入实用程序方法中,那么人们就会开始使用copy& paste。因为您可能需要在多个地方进行此项检查。这就是真正的痛苦开始的地方。代码重复永远不是一个好主意;如果可以通过创建更易于阅读的代码来避免......那么这就是完全可行的方法。
答案 1 :(得分:1)
是的,这是非常好的做法!
您正在做的事情称为抽象。你转向低级别的东西
status.equals(StatusEnum.ACTIVE.value() &&
dateRegister.isAfter(LocalDate.now)
更高级别的东西:
isActive(status)
如果我不太了解您的代码,如果我阅读您的第一段代码,我可能会感到困惑。我会像
呃......这段代码在做什么?为什么要检查所有这些东西?
如果我读了你的第二段代码,我就知道你正在检查状态是否有效,更重要的是,我不想知道的低级别是否被隐藏我
另一个优点是您输入的代码更少。当你提取某个方法作为一种方法时,下次你想要这样做"某些东西",只需调用该方法而不是复制那段代码!
但是,这样做时要小心。一定要抽象地命名方法,但不要过于抽象,或过于具体。所以这些名字并没有那么好用:
parameterIsEqualToActiveAndDateRegisterIsAfterToday
checkStuff
答案 2 :(得分:0)
它不是简单或复杂。如果有人查看您的代码,那么他将无法理解if语句正在检查什么,但是当您将其放入函数并给出适当的名称时,任何人都可以轻松识别if语句是否正在检查状态是否处于活动状态。创建函数使代码简单,清晰和易懂。