对于采取条件操作的方法,什么是良好的命名约定?

时间:2010-07-01 17:36:36

标签: language-agnostic naming-conventions

假设我有一个方法Foo()。根据方法Foo()确定,ShouldFooNow()只适用于某些时候。但是,很多时候程序必须考虑此时Foo()是否合适。所以不要写:

if ShouldFooNow():
   Foo()
无处不在,我只是把它变成了一个函数:

def __name():
    if ShouldFooNow():
       Foo()

这种方法有什么好名字?我很难想出一个很好的约定。 IfNecessaryFoo()很尴尬,尤其是Foo()名称较长时。 DoFooIfShould()?更尴尬。

什么是更好的名字风格?

5 个答案:

答案 0 :(得分:17)

我觉得你很亲密。将操作/意图放在方法名称的头部,以便于字母搜索。如果我写的是那样的话,我会考虑

FooIfNecessary()
FooIfRequired()

比如说,

ElevatePermissionsIfNecessary()

答案 1 :(得分:1)

我最近开始使用这个惯例:

FooIf(args, bool);

其中args是该方法采用的任何参数,bool要么是期望一个布尔值,要么是某种解析为布尔值的Func。然后,在该方法中,我检查bool并运行逻辑。将这些断言保持在一行并且对我来说看起来很干净。

我的C#代码中的日志记录示例:

public void WarnIf<T>(T value, string message, Func<T, bool> isTrue)
{
  if (isTrue(value)) _log.Warn(message);
}

然后我会用以下的东西来称呼它:

WarnIf(someObject, "This is a warning message to be logged.", s => s.SomeCondition == true);

(调用者可能不正确,但你明白了......我现在没有代码在我面前。)

答案 2 :(得分:0)

您可以使用EnsureFoo()

例如,方法EnsurePermissions()将根据需要采取适当的措施。如果权限已经正确,则该方法将不执行任何操作。

答案 3 :(得分:0)

Michael Petrotta的答案(后缀IfNecessaryIfRequired很好,但我更喜欢一个简短的替代词:IfNeeded

ElevatePermissionsIfNeeded()

如果您想要更短的内容,我会考虑像MayMight这样的前缀:

MayElevatePermissions()
MightElevatePermissions()

答案 4 :(得分:0)

我看不出原始代码有什么问题:

if shouldFoo():
  Foo();

恕我直言非常清楚。

不仅如此,它还清楚地将决定采取行动的关注点与行动本身的关注点区分开来。

类似问题的另一种选择,避免后缀的方法略有不同:

https://softwareengineering.stackexchange.com/a/161754/262009