方法和函数名称中的“ A”,“ an”和“ the”:您要做什么?[关闭]


16

我敢肯定,我们中的许多人都曾经在某一点看到过这样的方法名称:

  • UploadTheFileToTheServerPlease
  • CreateATemporaryFile
  • WriteTheRecordToTheDatabase
  • ResetTheSystemClock

也就是说,方法名称也应是语法正确的英语句子,并包括纯粹使它们像散文一样阅读的多余单词。就我个人而言,我不是这种“文字”方法名称的忠实拥护者,我更喜欢简洁,但仍要尽可能清楚。在我看来,“ a”,“ an”和“ the”之类的单词在方法名称中看起来很尴尬,这使得方法名称不必要地冗长而没有真正添加任何有用的内容。对于前面的示例,我希望使用以下方法名称:

  • UploadFileToServer
  • CreateTemporaryFile
  • WriteOutRecord
  • ResetSystemClock

以我的经验,这比写出更长的名字的其他方法要普遍得多,但是我既看到了这两种风格,又很想知道其他人对这两种方法有何想法。

那么,您是在“像散文一样阅读的方法名称”阵营中,还是在“说我的意思却像糟糕的外语到英语翻译的大声读出来的方法名称”阵营中?


7
我从未见过名称为的方法WriteTheRecordToTheDatabase。如果有人检查了此内容,他们将与您进行认真的交谈。
蒂姆·罗宾逊

13
Please“?哇
配置器

3
我只想补充一句,WordPress具有模板帮助程序功能,例如“ the_contents()”,“ get_the_post()”等。
卡森·迈尔斯,

1
@Carson Myers Hah,这是一个完美的现实例子。我一定已经压制了我上次查看WordPress代码时的记忆:-)
Mike Spross

Answers:


21

我同意散文方法很烂,但有一个例外:

单元测试用例

这些通常不会在您的代码中调用,也不会显示在测试报告中。因此,读出带有更多散文的内容很方便:

  • AddingACustomerOrderFailWhenCustomersIdIsInvalid:失败
  • OutOfBoundsPriceReturnsAnError:已通过
  • CanDeleteAnEventFromASeason:已通过

甚至应该谨慎地做,但是我可以将它看作至少一种情况,在这种情况下,语法上的加法可以使表达通过和失败的内容更加容易。当然,除非您的语言/框架为测试读数中的测试描述提供了一种除方法名称以外的良好描述的机制,否则这种情况也将被忽略。


1
+1是一个很好的例子,说明散文方法名称实际上可以从中受益。这很有趣,因为既然您提到了它,我在编写单元测试名称时就已经专门进行了此操作,因此我以后运行它们时知道该测试到底在做什么。
Mike Spross

这很有用,并且符合Roy Osherove建议的MethodUnderTest_Condition_ExpectedBehaviour 单元测试命名约定。例如AddOrder_WithInvalidCustomerId_FailsCreateItem_WithOutOfBoundsPrice_ReturnsErrorDeleteEvent_EventExistsInSeason_Succeeds
StuperUser 2011年

@StuperUser用于预期的行为,您实际上已经放置了预期的测试结果,因此我不知道该方法应该返回什么。
eatablecode 2012年

@danRhul公平的一点,我还不够清楚;.._AdditionFails并且.._DeletionSucceeds应该更好。我确实给出了方法的结果,但是正如您指出的那样,它们可能与测试通过/失败术语混淆。
StuperUser 2012年

10

从办公室空间解读劳伦斯...

不,不,伙计,我相信如果我在这里工作的某个人将其命名为函数“ UploadTheFileToTheServerPlease”,他会被踢的。


10

这样的“长”名字听起来不像散文。单独使用时,也许,但伴随着其余的代码,它们只会使情况更加混乱。一探究竟:

bool ResultOfTheUpload
      = UploadTheFileToTheServerPlease(TheNameOfTheFile, TheServersAddress);

Yuuuuk!..

这不是有效的英文文本,而且在任何编程语言下都不会像这样。因此,在文章上花一些字节是没有意义的。


1
一个很好的例子说明了为什么我如此不喜欢这种方法!当我写问题时,我只是专注于听起来像散文的方法名称,但我同意你的观点:很难使调用代码看起来像散文一样,因此使各个函数名听起来像书面的一样是没有意义的。英语。
Mike Spross

3
我建议bool ResultOfTheGentlyUploadOfTheFileToTheServer
Wizard79 2010年

我曾与一个创建公司标准的人一起工作,该公司标准中必须遵循“ theVariable”和“ aMethod”。这个人也喜欢使所有代码行垂直排列。
克里斯,

7

从程序员的角度来看,“ UploadFileToServer”比“ UploadTheFileToTheServerPlease”更有意义,更易于阅读和理解。

除英语语法外,可读性和可理解性在编程中更重要!


完全同意..如果我读了第一天写的代码几天后,我确定它将使我发疯
。– Naveen

@Naveen:我已经使用过这样的代码,并且我第一次重命名了所有这些方法。而且我不知道这是否只是开发商或没有,但我认为这是使函数做多的事情,当你写他们的句子,即倾向UploadTheFileAndProcessItAndEmailTheOrdersToTheCustomers,虽然希望没有什么现实生活中那么糟糕。
Mike Spross

@Mike然后将方法重构为2种不同的方法;)
Gopi 2010年

2

鉴于我的生活有很多错别字,我最终会得到

* UploadTehFileToTehServerPleaz
* WriteTehRecordToTehDatabase
* ResetTehSystemClock
* ICanHazTehCheezburger

说真的,我什至会看看我的班级名字也是什么。如果我的班级叫做“文件”,我可能会选择

*UploadToServer
*DownloadFromServer

原来如此

   File file = new file;
   file.UploadtoServer(ServerAddress);

只是一个简单的例子,但希望这足以说明问题。


呵呵。我实际上已经看到,“ Teh”遵循“类似英语”的命名模式逐渐渗透到方法名称中。关于第二点:我完全同意,方法名称的冗余是我的另一个烦恼(File.UploadFileToServer... ugh)。
Mike Spross

0

我个人不在乎。我见过他们,他们不打扰我。我什至没有想到它们,直到另一位程序员对它们大声疾呼。我感到震惊的是,有人会如此关心这么少的事情。我的意思是他实际上对此很生气。但是那是我职业生涯的早期,大约11年前,从那时起,我发现开发人员对次要事物感到愤怒实际上是很普遍的。这就是为什么开发人员的经理能获得如此丰厚的报酬。他们必须每天与开发人员打交道。

我宁愿看到它而不是“ UL_FlToSrv”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.