假设我有一个方法Foo()
。根据方法Foo()
确定,ShouldFooNow()
只适用于某些时候。但是,很多时候程序必须考虑此时Foo()
是否合适。所以不要写:
if ShouldFooNow():
Foo()
无处不在,我只是把它变成了一个函数:
def __name():
if ShouldFooNow():
Foo()
这种方法有什么好名字?我很难想出一个很好的约定。 IfNecessaryFoo()
很尴尬,尤其是Foo()
名称较长时。 DoFooIfShould()
?更尴尬。
什么是更好的名字风格?
答案 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的答案(后缀IfNecessary
或IfRequired
很好,但我更喜欢一个简短的替代词:IfNeeded
。
ElevatePermissionsIfNeeded()
如果您想要更短的内容,我会考虑像May
或Might
这样的前缀:
MayElevatePermissions()
MightElevatePermissions()
答案 4 :(得分:0)
我看不出原始代码有什么问题:
if shouldFoo():
Foo();
恕我直言非常清楚。
不仅如此,它还清楚地将决定采取行动的关注点与行动本身的关注点区分开来。
类似问题的另一种选择,避免后缀的方法略有不同:
https://softwareengineering.stackexchange.com/a/161754/262009