2010-06-26 35 views
7

可能重复:
Anyone else find naming classes and methods one of the most difficult part in programming?难度命名功能

有时好像我真的不能找到一个功能,我写任何名字,可这是因为功能没有凝聚力足够?

当没有一个功能的名字出现时,你会怎么做?

+27

计算机科学有两个难题:(1)缓存失效; (2)命名事物; (3)逐个错误。 – 2010-06-26 23:36:47

+0

Duplicate:http://stackoverflow.com/questions/421965/anyone-else-find-naming-classes-and-methods-one-of-the-most-difficult-part-in-pro – gnovice 2010-06-27 00:41:07

+0

@Greg Hewgill:I打赌菲尔卡尔顿还活着,他会喜欢这个。 – 2010-06-27 11:46:03

回答

14

对于命名函数,只需避免简单地将名词命名,而不是在动词后面命名它们。一些指针:

  1. 具有唯一可见的函数名称,例如,没有validateInput()validateUserInput(),因为很难说出对另一个人的影响。另外,避免让看起来非常相似的字符,例如数字1和小写'l'。有时它会有所作为。
  2. 您是否正在与多人合作项目?你应该花一些时间去处理命名约定,例如,如果函数名应该有下划线,应该是camelCase等。
  3. 匈牙利符号是一个坏主意;避免这样做。
  4. 想想这个功能在做什么。想到你在问题中提到的凝聚力。一般来说,函数应该只做一件事,所以不要将其命名为constructCarAndRunCar(),而是有一个构造函数和另一个运行它的函数。如果你的功能介于20到40行之间,那你就很好。
  5. 有时候,这取决于项目,如果类是纯粹的过程式(仅由函数组成),那么您可能还需要在类中加上前缀。因此,如果您有一门课负责运行模拟,请将您的功能命名为sim_pauseSimulation()sim_restartSimulation()。如果你的课程是基于OOP的,这不是一个问题。
  6. 请勿在函数本身中使用基础数据结构;这些应该被抽象掉。而不是像addToVector()addToArray()这样的功能,请改为addToList()。如果这些是原型或数据结构稍后可能会更改,则尤其如此。
  7. 最后,在您的命名约定中保持一致。一旦你想出了一个约定,坚持下去。想到不一致的函数名时,会想到PHP。

快乐编码! :)

+0

哇,好的列表,匈牙利语是MS传播的一些最糟糕的东西,甚至MS有摆脱释放的恶魔的问题... – jdehaan 2010-06-26 23:58:10

+0

告诉我关于它的信息:) 我去年夏天在MS工作,匈牙利语是可怕。假设有一个指向WCHAR字符串的长指针:'LPWSTR *'。 – SHC 2010-06-27 00:00:49

+0

我不亲自使用匈牙利符号,从来没有 - 但它怎么样使它如此可怕? – 2010-06-27 00:01:11

1

如果它仍然不合适,请给它最好的拍摄和重新使用。

0

转到www.thesaurus.com并尝试通过同义词找到更适合的名称。

+0

它也带有经验。编程中有许多神奇的词汇:处理程序,中继器,构建器,实用程序,转换器,管理器等。当你阅读了许多有关编程的代码和书籍时,你可以逐点找出这些词汇和情况。 – 2010-06-26 23:41:25

+3

通常,当某些事物名为“经理”时,你遇到了问题。 – 2010-06-26 23:42:40

+0

我不同意。在.Net中,你有很多经理。我不会说他们的命名不好,或者.Net在这些特定部分有问题。经理只是其他任何人的名字。查看:CommandManager,ApplicationManager,ResourceManager,PropertyManager,SecurityManager ...我可以在.Net框架中命名至少100个经理。 – 2010-06-26 23:56:33

2

有时可能是因为你的功能太大,因此做了太多事情。尝试将你的函数分解为其他函数,并且可能会更清楚地调用每个单独的函数。

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

另一个建议是从其他人处获得反馈。通常来自另一个角度并且首次看到该功能的其他人会更好地了解该功能的内容。

0

与功能名称几乎同等重要的是,您与注释一致。许多IDE将使用您正确格式化的注释,不仅为您可能正在使用的功能提供上下文相关帮助,而且它们可用于生成文档。这是无价的长时间回到项目或与其他开发人员合作时。

在学术环境中,它们提供了您的意图的赞赏示范。

一个好的经验法则是[动词] returnDescription。使用GetName()类型的函数很容易,不能普遍适用。在不显眼的代码和描述性代码之间找到平衡是很困难的。

这是.Net convention guide,但它适用于大多数语言。

+2

我完全不同意。我经常发现最好的评论代码是最难读的,而且通常也是最容易出错的。在uni老师会告诉我们,评论代码是猫的pj,但多年的经验告诉我,否则。好的代码确实是不需要内联评论的代码,因为这些功能与系统架构相媲美。 “有道理 - 不是评论”是我总是说的。 – 2010-06-26 23:52:38

+0

@Banang我很欣赏这个观点。评论混乱是一个问题,不应该被用来代替'良好的设计。就像你说的那样http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered/694644#694644 – Laramie 2010-06-27 00:44:08

+0

@MiaClarke,俗话说得好,“如果代码和意见不一致,都是错误的。”只是在评论中重复该算法是令人困惑/冗余的。只是对功能,设计决策进行了概述,评论中有些棘手的问题,请注意可能的问题点。也许增加一些错误更改日志(或者可能将其委托给您的版本控制软件*,并带有足够的详细信息*)。 – vonbrand 2014-02-13 03:21:23

0

当我不必削减单词时,我觉得更容易命名函数。只要你不做JavaScript的谷歌起始页,你可以做更长的名字。

例如,您在苹果可可框架中有方法dequeueReusableCellWithIdentifiermergeChangesFromContextDidSaveNotification

只要清楚这个函数在做什么,你可以随便命名它,然后重构它。

+1

ifTheNameIsSoLongItIsEasyToConfuseItWithAnotherSimilarOne它只是一个* bad *的名字。 “稍后重构”将永远不会发生,因为你熟悉(坏)名字,或者它在各处都被使用,并且有太多的工作需要改变。 – vonbrand 2014-02-13 03:27:04

2

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

对于函数,它几乎总是一个动作(动词),后跟参数和(或结果)的名词(离题,但对于变量不使用“arrayOfNames”或“listOfNames”,这些是类型信息,但是简单的“名”)。这也将避免不一致,如果你部分重构代码。

对于给定的模式,比如对象的创建,是一致,总是喜欢使用“创建...”相同的命名(而不是有时候“分配......”或“建立......”,否则你或你的同事最终会抓伤他们的头部)

0

作为我自己的一条实用规则,如果一个函数名称太长,它应该被雾化成一个新的对象。然而,我同意上面的所有帖子。顺便说一句,不错的noob问题