Function 命名函数的困难

Function 命名函数的困难,function,naming,Function,Naming,可能重复: 有时我似乎真的找不到我正在编写的函数的任何名称,这可能是因为函数不够内聚吗 当你想到一个函数没有好的名字时,你会怎么做?尽你最大的努力,如果它仍然不合适,以后再重新考虑。通过同义词找到一个更合适的名字。有时可能是你的函数太大,因此做了太多的事情。尝试将您的函数拆分为其他函数,可能会更清楚每个函数的调用方式 不要担心用一两个词来命名事物。有时候,如果函数做了一些可以用一句小句子来解释的事情,那么就继续给函数命名,如果它能帮助其他开发人员理解正在发生的事情的话 另一个建议是从其他人那里

可能重复:

有时我似乎真的找不到我正在编写的函数的任何名称,这可能是因为函数不够内聚吗


当你想到一个函数没有好的名字时,你会怎么做?

尽你最大的努力,如果它仍然不合适,以后再重新考虑。

通过同义词找到一个更合适的名字。

有时可能是你的函数太大,因此做了太多的事情。尝试将您的函数拆分为其他函数,可能会更清楚每个函数的调用方式

不要担心用一两个词来命名事物。有时候,如果函数做了一些可以用一句小句子来解释的事情,那么就继续给函数命名,如果它能帮助其他开发人员理解正在发生的事情的话


另一个建议是从其他人那里得到反馈。通常,从另一个角度来看并第一次看到函数的其他人会对函数的调用有更好的了解。

与函数名称同样重要的是,您与注释保持一致。许多IDE将使用正确格式的注释,不仅为您可能使用的函数提供上下文相关的帮助,还可以使用它们生成文档。这是非常宝贵的,当你在一段时间后回到一个项目中或者与其他开发人员一起工作时

在学术环境中,它们可以很好地展示你的意图

一个好的经验法则是[动词]返回描述。这对于GetName()类型的函数很容易,并且不能普遍应用。在不引人注目的代码和描述性代码之间很难找到平衡


这里有一个例子,但它适用于大多数语言。

我发现在不必减少单词的情况下,命名函数更容易。只要你不在谷歌首页上使用javascript,你就可以使用更长的名字

例如,在框架中有方法
dequeueReusableCellWithIdentifier
mergeChangesFromContextDidSaveNotification


只要清楚函数在做什么,你就可以随意命名并在以后重构它。

对于命名函数,只需避免使用简单的名词,而是用动词命名。一些建议:

  • 具有明显唯一的函数名,例如,没有
    validateInput()
    validateUserInput()
    ,因为很难说一个函数比另一个函数做了什么。此外,避免使用看起来非常相似的字符,例如数字1和小写字母“l”。有时它会带来不同
  • 您是否正在与多人合作进行一个项目?您还应该花一些时间检查命名约定,例如函数名是否应该有下划线,是否应该是camelCase,等等
  • 匈牙利符号是个坏主意;避免这样做
  • 想想函数在做什么。我想到了你在问题中提到的凝聚力。通常,函数应该只做一件事,所以不要将其命名为
    constructCarAndRunCar()
    ,而是让一个函数构造另一个函数运行它。如果你的函数在,比如说20到40行之间,你就很好了
  • 有时,这取决于项目,如果类是纯过程性的(仅由函数组成),您可能还希望在函数名前加上类前缀。因此,如果您有一个负责运行模拟的类,请将您的函数命名为
    sim\u pauseSimulation()
    sim\u restartSimulation()
    。如果您的类是基于OOP的,那么这并不是一个很大的问题
  • 不要在函数本身中使用底层数据结构;这些应该被抽象掉。与其使用像
    addToVector()
    addToArray()
    这样的函数,不如将它们改为
    addToList()
    。如果这些是原型,或者数据结构以后可能会更改,则尤其如此
  • 最后,在命名约定上保持一致。一旦你经过深思熟虑后想出了一个惯例,就要坚持下去。当想到不一致的函数名时,会想到PHP

  • 快乐编码!:)

    我遵循以下规则:根据目的命名(为什么?-设计决策),而不是根据内容命名(什么,如何?-可以在代码中看到)

    对于函数,它几乎总是一个动作(动词),后跟参数和(或结果)名词。(主题外,但对于变量,不要使用“arrayOfNames”或“listOfNames”,这些是类型信息,而只是“名称”)。如果部分重构代码,这也可以避免不一致


    对于对象创建之类的给定模式,要保持一致,并始终使用相同的命名方式,如“创建…”(有时不要使用“分配…”或“构建…”等),否则你或你的同事最终会挠头)

    作为我自己的一条实用规则,如果函数名太长,它应该在一个新对象中原子化。然而,我同意上面的所有帖子。顺便说一句,尼斯诺布问题在计算机科学中有两个难题:(1)缓存失效;(2)命名事物;(3)重复:@Greg Hewgill:我敢打赌如果Phil Karlton还活着,他一定会喜欢的。这还需要经验。编程中有很多神奇的词语,比如:处理程序、重复程序、构建器、UTIL、转换器、管理器等等。当你阅读大量关于编程的代码和书籍时,你会一点一点地发现这些词语和情况当它们可以正常使用时,当某个东西最好命名为“管理器”你有一个问题。我不同意。在.Net中你有很多管理者。我不会说他们的名字不好,或者说.Net在这些特定的部分有问题。管理者和其他任何人一样只是一个名字。查看:CommandManager、ApplicationManager、ResourceManager、PropertyManager、SecurityManager…我是