“number of foos”变量的命名惯例

123

假设我需要将foo对象的数量存储在一个变量中。

作为非英语母语者,我经常想知道什么是最好的(=简短并立即明确)变量名称。

foo_num? num_foo? no_foo? foo_no? 或者其他名称?

完整的名称应该是number_of_foos,但有点冗长。

你最喜欢哪个?为什么?


我喜欢fooCount的答案,但我认为number_of_foos并不太长,不过这取决于“foo”实际上是什么意思。 - Chance
同时,您需要考虑变量的用途。带有“number_of_foos”的算术表达式很快就会变得繁琐。 - user7610
可能是 https://dev59.com/22w15IYBdhLWcg3w1_YN 的重复问题。 - Michael Freidgeim
10个回答

80

我选择使用fooCount,因为它很直观,而且我认为"count"这个词描述起来最简短并且最恰当,而不是"number of"或类似的表述。

如果您需要将其存储为最终和静态值(即如果它是一个常量并且不需要更改),则我选择使用FOO_COUNT。(常量使用全大写!)

如果您必须将其作为自己定义的类Foo的属性进行存储,则我选择count并通过Foo.count方式进行调用。

提高可读性,有利于您和团队的协作!


foosCount,因为复数更好地表示了一个集合。而且它应该是一组事物的计数。 - Magne
3
但这取决于情况。对于一些名称,如“gamesIncludedCount”,复数听起来不错,但对于其他名称,如“gameCount”,单数更好。 - Magne

32

由于该变量存储了foo对象的数量计数,fooCount成为我的首选。


+1表示添加解释(尽管措辞相当不雅)。 - user395760
1
@delnan - 通常我会详细解释,但我现在是用手机回答。 - Justin Niessner

22
在英语中,"number"和"count"这两个词既可以作为名词也可以作为动词。但是通常情况下,我们更多地看到"number"作为名词使用,而"count"则作为动词使用。因此,你可以认为"the number of foos"或"num_foo"听起来比"the foo count"或"foo_count"更熟悉。当提到一个不断变化的数量时,对我来说它确实听起来更自然。即使"count"被用作名词,对我而言它也暗示着一个随时间增长的值。
Ruby和Python都有.count方法,这说明了单词被用作动词而不是名词。在Ruby中,你可能会说:
foos.count   # Count how many elements in the array 'foos'

然而,这将返回一个表示foos数量的值,如果你只是引用了一个名为“foo_count”的变量,那么这正是你所期望的。因此,在某些方面,“foos.count”和“foo_count”看起来有点相似,这是有点好的。

“数字”在某些情况下可能会产生歧义,因为通常会存储一些不代表某物数量的数字。其他人已经提到了ID和信用卡号码。这里是另一个例子:

num_string

看看那个变量名字,你能猜出它代表什么吗?是表示字符串数量的整数,还是数字的字符串表示形式?

我只是随口想想,并根据我所见到的一些优缺点进行比较。之所以我在这个旧页面上,是因为我发现自己不一致地使用这两种方式,想看看其他人是怎么做的。

顺便说一句,我不喜欢“nr_foo”,因为对我来说,“nr”真的不像“number”这个词。听起来更像“ner”,或者代表“not rated”或“national rugby”的缩写。:-) 我甚至不想去猜fooCnt听起来像什么。就是不行。


17

Linux内核使用"nr_foo",这比"no_foo"更好(看起来像否定)。我自己倾向于使用"fooCount"或者"fooCnt",但有时也会用"numFoo"。我不确定为什么我在"fooCount"和"numFoo"之间摇摆不定。我猜这取决于我的心情。但是,您应该保持一致(我也应该);)


4
“number”这个词比较模糊,“count”则更为明确。例如,一个“number”可能是指身份证号码。除了Linux内核的作者之外,人们更容易理解“number”的缩写形式,包括“nFoo”和“numFoo”。(注:McConnell在《代码大全》中可能也提到了这一点,但我没有带着副本。) - Andy Thomas
1
@Andy Thomas-Cramer - 在我看来并不太混乱:credit_card_nr听起来像是“信用卡号码”,而nr_credit_cards听起来像是“信用卡数量”,且比credit_cards_count更为简洁。在我看来相当自然(但我可能错了,因为我不是以英语为母语的人)。 - Giacomo
1
@rjack 无论如何都应该是 credit_card_count,因为当名词作为复合词的一部分时,通常不使用复数形式。 - siride
1
Linux中的“nr”,以及你的答案是说明“number”这个词有多么令人困惑的好例子。在Linux中,“nr”也被用来表示顺序号,而不是计数。例如,__NR_open并不是open系统调用的数量,而是系统调用的索引,即您传递给系统调用指令的值,用于指定您正在调用哪个系统调用。 - Ruslan
2
就像@Kal的回答一样,我个人会避免使用fooCnt,因为有可能会被错误地解释。 - Ruben9922
我同意Ruben的观点。我肯定会把fooCnt读错。 - asaf92

8

fooCount代表变量不是常量,FOO_COUNT则代表它是常量。:D


7
我个人会选择 `total_foos` 或 `totalFoos`,具体取决于语言标准。它更好地表示该值是最终总数,而不仅仅是运行计数。
说“我有3个总 foos”比说“我有一个 3 的 foos 计数”更有意义。
总的来说,这不是一件大事,但我总是使用 `total` 而不是 `count`!

4
totalFoos 可能意味着它是 Foo 的一组“完整的集合”(在我收集各种集合时发生过这种情况)。此外,为了可读性,将标识符放在单词开头是很好的习惯。因此,我建议使用 foosCount,因为它的含义不太含糊且以 foo* 开头。你也可以说:“我有3个 foosCount”。 - Magne

3
大多数情况下,像其他人说的那样,使用fooCount是最合适的。但是有时候更适合使用foos,特别是当您实际上没有foos列表或它们不是单独的对象时(例如seconds;对于披萨,您可以有slices等)。
只有在毫无混淆的情况下才使用foos - 当很明显您在此上下文中永远不会有foos列表。

如果您有时使用 foos 表示“foo 对象的数量”,而其他时候表示“foo 对象的集合”,那么我认为这可能会导致混淆。 - James McNellis
“slices” 对我来说听起来像是 pizza 对象中的一组 slice 对象数组。我会使用 sliceCountnr_slices,或者其他什么(我还没有决定:D)。 - Giacomo
是的,只有在没有混淆的情况下才使用它。 - configurator

2
我使用somethingCountsomething_count)来表示某些东西的数量。
我使用somethingIndexsomething_index)来表示某些东西的序列号,因为“number”一词含义不明确(它可以表示数量和序列号)。

1
我会选择 fooCount

1

我倾向于使用fooCount或类似的变量名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接