Language agnostic 给函数取个好名字有困难吗

Language agnostic 给函数取个好名字有困难吗,language-agnostic,coding-style,Language Agnostic,Coding Style,因此,我经常难以用简洁的名称描述函数。在为重用而设计的函数中,这通常不是问题,但通常需要将大型流程分解为子函数。它们通常会得到奇怪的名称,例如连接到accesslines或handlewallsvisionsplit或类似的名称。虽然这些函数只做一件事,但很难给它们起个好名字,因为它们实际上只是更大算法的一部分 在这种情况下你会怎么做?这非常令人沮丧。我宁愿在更大算法的上下文中使用长得可笑的方法名,因为这样可以减少查看函数实现的需要 像ReadPropertiesFromFileThenWrit

因此,我经常难以用简洁的名称描述函数。在为重用而设计的函数中,这通常不是问题,但通常需要将大型流程分解为子函数。它们通常会得到奇怪的名称,例如
连接到accesslines
handlewallsvisionsplit
或类似的名称。虽然这些函数只做一件事,但很难给它们起个好名字,因为它们实际上只是更大算法的一部分


在这种情况下你会怎么做?这非常令人沮丧。

我宁愿在更大算法的上下文中使用长得可笑的方法名,因为这样可以减少查看函数实现的需要


像ReadPropertiesFromFileThenWriteToSession这样的名称比ReadProps更好

您的函数应该真正说明它们是做什么的!但不是以过于冗长的方式。这是你将随着时间的推移掌握的东西,它需要一点练习来获得正确的函数


快速阅读一下我前一段时间写的关于这类事情的文章:)确保你按照启发我写这篇文章的思路去做,并查看评论。

重构书籍中的一个建议是,看看长算法,看看你觉得代码中有块代码可以用单行注释将此块重构为私有函数,并使用单行中的内容作为函数的名称。 这可能真的很长,但如果它能帮助你快速阅读算法,那么它是非常好的。代码完成提到了一个很好的范围在9到15个字符之间


如果它是一个私人助手函数,请不要担心,以后重构名称是没有问题的

每当我遇到困难试图命名一个函数或过程时,我都会回头仔细思考我认为它是为了什么。通常情况下,如果一个名字不容易自我暗示,那就是一个暗示,表明我没有考虑过函数或过程真正应该做什么

你有一个过程需要做a,B,C,…,X,Y和Z;您不能将过程命名为doABCDEFGHIJKLMNOPQRSTUVWXYZ。您必须找到一些逻辑上的中间级别分组(可能是几个层次的分组),将流程划分开来

有时,要找到正确的名称,需要将代码四处移动,使其位于更具逻辑性的块中


另一个帮助是封装函数/过程(取决于您使用的语言的特性),以便名称可以更短(因为它的名称可以在其容器的上下文中解释)。例如,“openFile”过程通常只打开一个文件进行读取;但在“UserPrefsFile”类的上下文中,它可能有更具体的含义。

已故的伟大菲尔·卡尔顿(Phil Karlton)曾有一句著名的俏皮话:计算机科学中只有两个难题——命名和缓存失效。我的经验使我相信这里面有很多道理


给事物命名是一门艺术,也是一门科学,因此没有任何硬性规定。也就是说,我有时会阅读,其中有一些好的启发法要记住。我最喜欢使用名词短语,如-person.getName()或bitTorrentClient.findPeersFromTracker()。在这两种情况下,代码行的意图与英语中的短语类似。

有时,您可以通过简单地重新编写名称来缩短函数的名称长度。而不是:

void RetrievePropertiesFromRemoteStore()
bool CheckToSeeIfUserIsAuthorized()
您可以使用:

void RetrieveRemoteProperties()
而不是:

void RetrievePropertiesFromRemoteStore()
bool CheckToSeeIfUserIsAuthorized()
使用:

另一种减少它的方法是重新思考函数的作用。而不是像这样的一个函数:

void GetUserProfileAndSetUpSession()
你可以:

void GetUserProfile()
void SetupSession()

有时,如果你不能想出一个好的函数名,这表明函数没有一个好的、清晰的焦点,需要重构。如果它是一个类方法,那么该类可能也需要重构

但是,找到最好的名字是值得的,因为它使你的代码更容易理解和使用

更新:许多软件工程作者都谈到了命名的重要性。亨利·F·莱德加德(1975)和布赖恩·克尼汉(Brian Kernighan)以及P.J.普劳赫(P.J.Plaugher)的著作都是早期的著作,至今仍值得一读。史蒂夫·麦康奈尔(Steve McConnell)的《精彩》(2005年第二版)是一个较新的例子,用了整整一章来讨论这个话题


编程风格的元素部分借鉴了Strunk和White的模式,这实际上具有惊人的相关性。他们强调让文章清晰、极其简洁适用于我们的技术写作和评论(以及命名),但我一直认为这与我们在重构和改进代码时所做的类似。

嘿。读到问题标题时,我突然想到,编程行为可以被描述为“难以为函数找到好的名称”。

您可以使用编号和后缀“*”来避免代码中出现过多名称:

void DoX()
void DoX_Decode1()           <-- this name shows that this function is only used by DoX()
void DoX_Decode2()
void DoX_Decode3()
void DoX_Find1()
void DoX_Find2()
void DoX_Find3()

通过这种方式,您可以获得唯一的函数名(有助于搜索、搜索和替换),并且可以保持它们相对较短。您还可以避免将它们提取到单独的类和单独的代码文件的麻烦。只要把前缀保持短一点,这样你就可以很容易地忽略和忽略它们。

当你没有合适的名字时,只需使用字母表中的字母即可。一旦这些词用完了,从字典中随机挑选一些词。这样,他们就永远不会解雇你,因为你是唯一理解代码的人。

通过使用面向对象的方法,它有助于减少这个问题。。 connectionsToAccessLines->connexion.connect(System.getAccessLines())

handleWallVisionSplit->这一个,我不太确定它是做什么的:D 但是,我要说的是:wall.handleVision(wall.split);不管怎样,我想你明白我的意思

此外,有时,当很难命名一个过于特定的函数时,可能是因为代码不够