Language agnostic 什么';对于采取条件操作的方法,有什么好的命名约定?

Language agnostic 什么';对于采取条件操作的方法,有什么好的命名约定?,language-agnostic,naming-conventions,Language Agnostic,Naming Conventions,假设我有一个方法,Foo()。只有在某些情况下,Foo()才是合适的,这是由方法ShouldFooNow()确定的。但是,在程序中必须多次考虑,如果 FULL()/代码>此时是合适的。因此,与其写: if ShouldFooNow(): Foo() 在任何地方,我都只是把它变成一个函数: def __name(): if ShouldFooNow(): Foo() 这个方法的好名字是什么?我很难想出一个好的会议IfNecessaryFoo()很笨拙,尤其是当Foo

假设我有一个方法,
Foo()
。只有在某些情况下,
Foo()
才是合适的,这是由方法
ShouldFooNow()
确定的。但是,在程序中必须多次考虑,如果 FULL()/代码>此时是合适的。因此,与其写:

if ShouldFooNow():
   Foo()
在任何地方,我都只是把它变成一个函数:

def __name():
    if ShouldFooNow():
       Foo()
这个方法的好名字是什么?我很难想出一个好的会议
IfNecessaryFoo()
很笨拙,尤其是当
Foo()
的名称较长时
DoFooIfShould()
?甚至更尴尬


什么是更好的名称样式?

您可以使用
ensurefo()


例如,如果需要,方法
ensurecommissions()
将采取适当的操作。如果权限已经正确,该方法将不会执行任何操作。

我认为您已经非常接近了。将action/intent放在方法名称的开头,以便于按字母顺序搜索。如果我写那样的东西,我会考虑

FooIfNecessary()
FooIfRequired()
比如说,

ElevatePermissionsIfNecessary()

我最近开始使用约定:

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);
}
(打电话的人可能不对,但你明白了……我现在没有密码。)

Michael Petrotta的回答(
如果需要
如果需要
后缀)很好,但我更喜欢一个简短的选择:
如果需要

ElevatePermissionsIfNeeded()

如果你想要一个更短的东西,我会考虑一个前缀,比如<代码> > 或<代码>可能:

MayElevatePermissions()
MightElevatePermissions()

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

if shouldFoo():
  Foo();
这是非常清楚的

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

类似问题的另一个选择是使用稍微不同的方法来避免后缀:


您真的会这样调用
WarnIf()?
编辑的第一个参数在哪里。我很快就错过了那个。太习惯了我整天写的扩展方法:)你不需要
==true
。前缀方式的问题是,方法名称通常是明确表示动作的动词,但在这种情况下,听起来好像我们在表示副作用;所以我知道
可能提升权限
可能提升权限,但这是主要的操作,还是仅仅是副作用?或者它也可能听起来像是一个带有
bool
返回类型的问题,实际上并不执行操作,例如
Can-
Is-
,等等。
if shouldFoo():
  Foo();