验证方法的良好命名约定是什么?

What is good naming convention for validating method?

假设有一种验证用户输入的方法。此方法检查列表中是否有任何重复,如果存在,则抛出某种异常。

在这种情况下,该方法的正确命名是什么?

  1. validateIsDuplicated
  2. 验证重复
  3. 验证非重复
  4. 否则..

因为英语不是我的母语,所以我不熟悉这个。如果你能给我解释一下,我将不胜感激为什么

根据 Oracle Oracle naming standard:

  • 方法应该是动词,首字母小写混合,每个内部单词的首字母大写。

如您所见,除了需要描述之外,它没有指定任何其他内容。在您的情况下,您的示例可以更具描述性。如果你方法验证列表,也许把它放进去。如果它检查一个对象中的字段,指定它。例如 validateIdListDuplicate.

这是一个主观话题,因此没有正确答案。

我没有看到这方面的任何约定。

强调积极的一面

我建议用肯定的措辞,说明有效的情况。专注于你想看到的,而不是你想避免的。一致使用正逻辑使代码更易于阅读和理解,而无需在脑海中进行布尔逻辑翻转。

例如……如果您希望您的列表没有重复,这意味着该列表具有唯一项,通常也称为 distinct。因此,将有效案例声明为验证方法的名称:isDistinct.

boolean isDistinct( List< LocalDate > dates ) {
    return ( Set.copyOf( dates ).size() == dates.size() ) ; 
}

根据 JavaBeans 约定,前导 is… 表示对象的 属性 的访问器方法 (getter)。如果在您的上下文中这可能会令人困惑,请选择另一个名称,例如 datesListIsDistinct.


顺便说一句,对于复杂的数据验证,您可能会发现有用的 Jakarta Bean Validation. See also specification page

从技术上讲,从约定的角度来看,您提到的所有方法都是正确的。但命名约定是一个主观话题,可能因团队而异。最后是关于团队听起来更直观的问题。

话虽如此,从给定的选项来看,非重复版本对我来说听起来比其他版本好一点,但我想将其改写为 validateNonDuplication。它听起来比其他人更好的原因是因为你的积极流程是为了确保没有重复,而如果有重复则抛出异常。因此,期望更符合非重复项。

因此在我看来,在这种情况下我会选择 validateNonDuplication