可能重复:
Anyone else find naming classes and methods one of the most difficult part in programming?难度命名功能
有时好像我真的不能找到一个功能,我写任何名字,可这是因为功能没有凝聚力足够?
当没有一个功能的名字出现时,你会怎么做?
可能重复:
Anyone else find naming classes and methods one of the most difficult part in programming?难度命名功能
有时好像我真的不能找到一个功能,我写任何名字,可这是因为功能没有凝聚力足够?
当没有一个功能的名字出现时,你会怎么做?
对于命名函数,只需避免简单地将名词命名,而不是在动词后面命名它们。一些指针:
validateInput()
和validateUserInput()
,因为很难说出对另一个人的影响。另外,避免让看起来非常相似的字符,例如数字1和小写'l'。有时它会有所作为。constructCarAndRunCar()
,而是有一个构造函数和另一个运行它的函数。如果你的功能介于20到40行之间,那你就很好。sim_pauseSimulation()
和sim_restartSimulation()
。如果你的课程是基于OOP的,这不是一个问题。addToVector()
或addToArray()
这样的功能,请改为addToList()
。如果这些是原型或数据结构稍后可能会更改,则尤其如此。快乐编码! :)
如果它仍然不合适,请给它最好的拍摄和重新使用。
转到www.thesaurus.com并尝试通过同义词找到更适合的名称。
它也带有经验。编程中有许多神奇的词汇:处理程序,中继器,构建器,实用程序,转换器,管理器等。当你阅读了许多有关编程的代码和书籍时,你可以逐点找出这些词汇和情况。 – 2010-06-26 23:41:25
通常,当某些事物名为“经理”时,你遇到了问题。 – 2010-06-26 23:42:40
我不同意。在.Net中,你有很多经理。我不会说他们的命名不好,或者.Net在这些特定部分有问题。经理只是其他任何人的名字。查看:CommandManager,ApplicationManager,ResourceManager,PropertyManager,SecurityManager ...我可以在.Net框架中命名至少100个经理。 – 2010-06-26 23:56:33
有时可能是因为你的功能太大,因此做了太多事情。尝试将你的函数分解为其他函数,并且可能会更清楚地调用每个单独的函数。
不要担心用一两个单词来命名事物。有时候,如果函数做了一些可以用各种简短句子来解释的东西,那么继续并命名该函数,如果它能帮助其他开发人员理解正在发生的事情。
另一个建议是从其他人处获得反馈。通常来自另一个角度并且首次看到该功能的其他人会更好地了解该功能的内容。
与功能名称几乎同等重要的是,您与注释一致。许多IDE将使用您正确格式化的注释,不仅为您可能正在使用的功能提供上下文相关帮助,而且它们可用于生成文档。这是无价的长时间回到项目或与其他开发人员合作时。
在学术环境中,它们提供了您的意图的赞赏示范。
一个好的经验法则是[动词] returnDescription。使用GetName()类型的函数很容易,不能普遍适用。在不显眼的代码和描述性代码之间找到平衡是很困难的。
这是.Net convention guide,但它适用于大多数语言。
我完全不同意。我经常发现最好的评论代码是最难读的,而且通常也是最容易出错的。在uni老师会告诉我们,评论代码是猫的pj,但多年的经验告诉我,否则。好的代码确实是不需要内联评论的代码,因为这些功能与系统架构相媲美。 “有道理 - 不是评论”是我总是说的。 – 2010-06-26 23:52:38
@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
@MiaClarke,俗话说得好,“如果代码和意见不一致,都是错误的。”只是在评论中重复该算法是令人困惑/冗余的。只是对功能,设计决策进行了概述,评论中有些棘手的问题,请注意可能的问题点。也许增加一些错误更改日志(或者可能将其委托给您的版本控制软件*,并带有足够的详细信息*)。 – vonbrand 2014-02-13 03:21:23
当我不必削减单词时,我觉得更容易命名函数。只要你不做JavaScript的谷歌起始页,你可以做更长的名字。
例如,您在苹果可可框架中有方法dequeueReusableCellWithIdentifier
和mergeChangesFromContextDidSaveNotification
。
只要清楚这个函数在做什么,你可以随便命名它,然后重构它。
ifTheNameIsSoLongItIsEasyToConfuseItWithAnotherSimilarOne它只是一个* bad *的名字。 “稍后重构”将永远不会发生,因为你熟悉(坏)名字,或者它在各处都被使用,并且有太多的工作需要改变。 – vonbrand 2014-02-13 03:27:04
我遵循以下规则:名称根据目的(为什么? - 设计决定),而不是内容(什么,如何? - 可以在代码中看到)。
对于函数,它几乎总是一个动作(动词),后跟参数和(或结果)的名词(离题,但对于变量不使用“arrayOfNames”或“listOfNames”,这些是类型信息,但是简单的“名”)。这也将避免不一致,如果你部分重构代码。
对于给定的模式,比如对象的创建,是一致,总是喜欢使用“创建...”相同的命名(而不是有时候“分配......”或“建立......”,否则你或你的同事最终会抓伤他们的头部)
作为我自己的一条实用规则,如果一个函数名称太长,它应该被雾化成一个新的对象。然而,我同意上面的所有帖子。顺便说一句,不错的noob问题
计算机科学有两个难题:(1)缓存失效; (2)命名事物; (3)逐个错误。 – 2010-06-26 23:36:47
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
@Greg Hewgill:I打赌菲尔卡尔顿还活着,他会喜欢这个。 – 2010-06-27 11:46:03