当您想到一个好名字时,如何命名函数/变量/等?[关闭]


13

当您定义函数/变量/等时,不确定如何命名,该如何命名?您如何命名?

如果您在使用临时名称作为真实姓名之前将其用作真实姓名,那么您使用什么临时名称?


更新

我一直在使用类似的东西WILL_NAME_LATERNEEDS_NAMETO_BE_NAMED。我希望有一个采用的约定,实际上我希望,如果使用该采用的约定,IDE会在不更改名称之前突出显示该名称。


在使用所有大写字母作为变量名时要小心。按照流行的惯例,它表示全局变量。
2010年

@sunpech,我知道,我也使用常量的命名约定。但我认为大写字母使其脱颖而出,因此我不要忘记对其进行重命名。我不会把它这么长时间命名了。
JD Isaacks 2010年

3
为了你的人在说谁,你不应该拿出一个名称的问题......甚至乔恩斯基特有时不能:stackoverflow.com/questions/521893/...
JD Isaacks

@JohnIsaacks我认为您应该暂时大胆。太多的人正在阅读这个问题,并将代码变成神圣的东西。老实说,是的,当您尝试进行更重要的操作时,可以编写特别的代码。我们这里不是将代码刻在石头上。
2010年

1
我想这样的约定是在代码中添加TODO,并说明为什么需要更新它。许多工具可以解析那些TODO,并显示所有尚待完成的事情的列表。
Eduardo Scoz

Answers:


29

几乎无法想出要设计的工件的名称。您可能不喜欢自己想出的名字,因为它既不简洁也不性感,但是如果您想得太认真,最终将得到一个名字不正确的人工制品。

假设您有一些可以帮助您构造对象的东西,但是您不知道这通常称为工厂。只需将其命名为ObjectCreator。听起来很钝,但至少很清楚。

假设您有一本将主机名转换为IP地址的字典。只需将其命名为HostnamesToIpAddresses即可。当然很长,但是它确切说明了它的作用。

无法为某事物起一个名字,意味着您不知道它在做什么,这也意味着您面临更大的问题。


8
我总是想拍打那些抱怨标识符过长的人(当他们只有三个或四个词时)。我们不应受到打字速度的限制,如果是的话,我们应该去看看ABCD并学习打字!
dash-tom-bang 2010年

1
由于+1 "The inability to come up with a name for something means you don't know what it is doing"。我认为这确实是重要的一点。意识到这一点有助于您发现代码中的歧义和不明确之处。
BiAiB

34

我总是尝试给变量和函数起好名字

如果我想不出一个好名字,我会满足于一个好名字

如果我不能拿出好名字,我会用一个好名字

在15年的专业编程工作中,我从来没有想过一个像样的名字。


6
+1代表诗意。
海绵

1
...然而,在15年零6个月前,Microsoft Bob出生了。
VirtuosiMedia

12

如果您想不出变量或函数的好名字,则可能是您不了解自己在做什么,或者您的设计很差。无论哪种方式,拍打诸如“ x”之类的任意名称(除非您正在处理坐标)都不会解决您的难题;它只会使情况变得更糟,而维持的痛苦也会更大。


8
我不同意。开发人员不会总是对业务术语有完整的了解。哎呀,即使是客户,也可能无法在需求收集过程中传达术语-更不用说有时甚至了解他们自己的业务了!但这并不能阻止软件的生产。它不会阻止原型的创建。甚至是由于缺乏理解而导致的正确的代码。但是在这些情况下的代码仍然需要生成和交付。
2010年

3
@sunpech对不起,但这有点吓人。您是否要告诉我们,编写随机代码是不常见的,这很普遍?如果您一无所知,请花点时间找出来,将来会避免出现问题。
亚当·拜特克

@AdamByrtek不,我不是那个意思。我的意思是,并非总是由开发人员和团队来全面了解客户的需求。一些客户很难解释他们想要什么,或者不知道他们想要什么。错误的代码确实发生了。从苛刻的要求到不切实际的期限,项目中都会出现问题。那是现实。没有完美的世界,开发人员可以解决所有未知问题,客户是完美的,截止日期是准确的。为原型生成的代码将被丢弃。但是编码仍然需要发生。
海绵

继续...我们不是在谈论签到之前制作生产代码或最终代码。我们正在谈论的是如何命名一个我们尚未完全了解的东西-最初可能由于一个很好的原因而开始进行一个不清楚的事情的开始(例如:团队中尚无人了解,也许不是)甚至客户)。但是,事情仍需要根据已知的情况向前发展。
2010年

1
@sunpech:我实际看到foobar在代码中使用的唯一地方是用于展示概念的小片段代码。当然,我在想起名字时也迷迷糊糊,但是我从来没有遇到过如此糟糕的处境,foo这是唯一合理的选择。如果发生这种情况,那么我真的不知道我在做什么,需要回到绘图板和伪代码,直到我知道该怎么做。
gablin

5

这个问题,尤其是答案,使我无所适从。知道,有人将不得不维护您刚刚在其中命名为变量“ Cup”的代码。如果您不幸运,那么有人会成为您!

你有一个变量。这是一回事。无论如何,它代表一件事。事物有名字。那就是你怎么知道他们就是东西!您是否真的在告诉我,因为您无法拿出真实事物的名称,所以必须以另一事物命名。

迭代器应称为i。嵌套的迭代器可能是一个错误,但是如果您需要它们,请按顺序遍历其余的元音(a,e,o,u和上帝帮助我,是的,有时是y)。

除此之外,只需将其称为“事物”并完成操作即可!


9
我必须抗议!显然,内部迭代器应称为j,而内部应称为k。悠久的数学传统一直在您的肩上!
Frank Shearar

嗯 我从来没有做过j和k。不过,我认为这很明智。
丹·雷

8
Dijkstra非常适合计算机科学的原因之一是,他的名字按正确的顺序包含了三个最常见的迭代器变量。
glenatron 2010年

3
@glenatron:最后,一种记住如何拼写该名称的方法!
配置器2010年

4

如果我不能马上提出一个好名字,我暂时使用一个“好”的名字,然后继续编码。至少它会充分描述项目,即使它不是完美的。几乎总是,当我完成编写该特定代码块的初稿时,我会想到一个更完美的名称。通过编码过程,我对特定变量的意图变得更加清晰。(另一方面,有时在我看来,to变量最初是不正确的,因此我出于某些原因而将其删除。)


3

我将其命名为我认为函数应该执行的操作-或多或少传达了意图。编写完函数的主体后,很明显可以调用该函数,然后根据需要返回并重命名。


1
这并不总是有效,特别是当开发人员可能不熟悉术语或业务/行业意图时。应该使用一些更通用和明显的方式来传达它需要稍后定义和更改。OP似乎在询问意图何时未知,以及最初应使用什么。如果命名或多或少传达了意图,那么好名声已经不远了。
2010年

1
@sunpech认真的说,即使刚开始从事具有特定领域的工作,我也毫不费力地提出了一个函数名。也许我只需要编写更多功能。:)
亚当·李尔

1
@sunpech:如何编写一个不知道其功能的函数?
Configurator

4
@sunpech:我没那么说。我只是说过,如果不知道它在做什么,就不可能编写一个函数。这是不可能的。我从未见过它的发生,也没有看到它可能如何发生。也许我很傻,但是当您命名一个函数DoFoo()时,您到底在里面放了什么?
配置器

2
@sunpech:我从没说过名字从一开始就必须是“好”。我只是看不到要创建一个函数而又不知道该怎么做的情况。
配置器2010年

2

foobar。由于命名函数/变量背后还没有意义,因此我将Foo和/或Bar与我要定义的内容结合使用。

当我对它应命名的名称有了更好的了解时,它使以后搜索/查找变得容易。

另请参阅Wikipedia上的Foobar

术语foobar,foo,bar和baz有时在计算机编程或与计算机相关的文档中用作占位符名称(也称为元语法变量)。它们已用于命名目的不重要的实体(例如变量,函数和命令),仅用于演示概念。单词本身在此用法中没有意义。Foobar有时单独使用。当需要多个实体时,有时会按此顺序使用foo,bar和baz。


1

在函数之前加上一些前缀,并为其命名一个最佳名称。例如,将选定用户的所有产品保存到数据库的函数可以是RENAME_SaveAllProductsForTheSelectedUserToTheDatabase()


当然,在这种情况下,您应该将函数命名为SaveAllProductsForTheSelectedUserToTheDatabase()
configurator

1

无论我如何称呼这些难以命名的变量,我都会 //TODO find a better name发表评论,以便稍后可以重命名

通常,当我开始使用变量/函数/类时,会为它们找到一个更好的名称。



0

查找好用的描述性名称几乎没有问题,但是有时命名变得非常多余,因为类名和变量名非常相似。WebClient webclient =新的Webclient(uri); ...等等


0

有时我会临时使用zzzz。

一个可以帮助您的好规则是:

  • 它是否返回布尔值且没有副作用:然后使用形容词(以is,was开头),但不要使用将来时。
  • 它是否返回不同的类型并且没有副作用:然后使用名词。
  • 它什么也不会返回,只是做点什么:然后使用动词。
  • 是一门课:然后使用一个名词。

-1

过去我经常使用bob,但这将是函数/脚本中唯一未正确命名的变量,因为否则代码很快就会变得不可读。

(bob是单日的宿醉-通过调用变量bob和fred摆脱困境)

我很高兴用i做柜台。

最好使用有意义的名称,即使它们不短而活泼。


我曾经和一个使用过类似名称的人一起工作过,他在自己的应用程序和应用程序中的类都使用过。也许不用说,他的代码通常很差。
dash-tom-bang 2010年

2
@ dash-tom-band:我认为他的代码通常很不稳定。
配置程序2010年

如果我可以将自己的名字写成某种匈牙利符号进行枚举,那么即使有一点点麻烦,我通常也会这样做。TPropertyEnhancmentTypeEditor =(PETEObtuse,PETEAwful,PETEDispicable);
彼得·特纳

-1

如果我绝对不知道该变量的名字,那已经有二十多年了……老女友的名字,或者我希望曾经是女友的女人。带有这些标识符的最后一个代码已于几年前从生产中删除。





-3

我倾向于在办公桌上使用东西。

  • 杯子
  • Alt键
  • oo
  • b / a / c(单字母垃圾邮件)
  • alk(可发音的多字母垃圾)

我也倾向于通用名称(至少对于函数而言):

  • 交换
  • 处理
  • 修订版
  • 修补匠

这是临时的东西。我发誓没有将其放入存储库中,更不用说生产了。

...


我总是觉得自己很脏,但是有时一种方法最明显的名字是“ Go”或“ DoIt”。每当我想出一个更好的名称时,我都会做,但是有时确实是“执行程序名称所隐含的工作”。但是,这对于使用函数名来说太长了。:)
dash-tom-bang 2010年

@ dash-tom-bang:由于某种原因,run看起来比更好go。也许是因为我们都希望我们的程序更快。
配置程序2010年
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.