用于创建某些内容的函数名称(如果尚未存在)

时间:2009-08-06 11:47:02

标签: language-agnostic function coding-style naming

我不时会写一个功能,如果它还没有产生某些东西,否则什么都不做 像CreateFooIfNecessary()EnsureThereIsAFoo()这样的名称可以运作,但他们觉得有点笨拙。

也可以说GetFoo(),但该名称并不意味着可以首先创建foo,只有当函数返回foo的句柄/指针/引用时它才有效

你们这些熟悉英语的人能想出更好的方法来命名这些功能吗?

13 个答案:

答案 0 :(得分:18)

GetOrCreate()

怎么样?

答案 1 :(得分:13)

更新

这些天我知道的更好,因此将应用命令查询分离(CQS)。 CQS说一个方法应 变异状态,返回结果,而不是两者。

因此,我目前的标准是:

Foo GetFoo(id); // Throws if Foo cannot be found for id
Foo FindFoo(id); // Returns null if the Foo cannot be found.
void CreateFoo(id[, args]); // Creates a Foo with supplied args.

旧帖子 - IGNORE

我经常使用这个标准:

GetFoo(); // Always returns a Foo, so creates if there isn't one already.
FindFoo(); // Returns null if the Foo cannot be found.

在您根据密钥加载员工或其他内容时,特别适用于数据访问,并且可能存在也可能不存在。

具体 - 这是一个记录在案的编码标准。在代码库上工作的每个人都知道这个标准,并以同样的方式实现它。这就是我们如何摆脱这些相当通用的好短名称。

答案 2 :(得分:6)

我会选择EnsureFoo()

答案 3 :(得分:3)

这通常称为懒惰创建。 LazyGetFoo()怎么样?

答案 4 :(得分:3)

所以你想成为一名创作者,对吧?然后......

LetThereBeFoo();

呵呵呵

检查是否存在

IsThereFoo();

答案 5 :(得分:3)

为什么不:

private FooType m_foo;

public FooType Foo
{
   get
   {
      if (this.m_foo == null)
      {
         this.m_foo = new Foo();
      }
      return this.m_foo;
   }
   set
   {
      this.m_foo = value;
   }
}

答案 6 :(得分:2)

我认为只有CreateFoo()就可以了。文档应指明函数在不同场景中的作用。查看一些File I / O API,例如Win32 API中的CreateFile(...)。根据参数,它将创建一个新文件或打开现有文件(如果存在)。你的不必是基于参数的,但它的行为可以根据程序的状态而有所不同。所以从根本上说,我认为你的可能也是如此。

答案 7 :(得分:1)

我将这些RequireFoo()命名为。

答案 8 :(得分:1)

如果很明显只存在一个Foo对象,我只是将其称为CreateFoo(),因为您希望多次调用只创建一次对象。

如果要返回值,我只是将其称为GetFoo(),因为延迟加载(可能)是一个实现细节,因此,在接口中不应该很明显。

如果可以创建多个Foo对象,并且没有返回它们,那么我不确定。听起来像是一个非常奇怪的情况。

答案 9 :(得分:0)

在我的Foo课程中我会有GetExistingOrNew(Guid id) 如果存在Foo,则返回现有的Foo或返回New Foo。

答案 10 :(得分:0)

我喜欢ForceFoo。在您的情况下,它将是EnforceExistanceOfFooForceGetFoo

答案 11 :(得分:0)

我最近开始使用defineFoo()因为我厌倦了getOrCreateFoo()

答案 12 :(得分:-5)

严重:

issetFoo();

采取小便:

AreWeThereYetFoo(); helloFoo(); booFoo();