通过使用多种编程语言和库,我注意到用于集合中元素总数的各种术语。
最常见的似乎是length
,count
和size
。
例如。
array.length
vector.size()
collection.count
有没有首选的用语?它取决于收集的类型吗?即。可变/不变
是否首选将其作为属性而不是方法?
通过使用多种编程语言和库,我注意到用于集合中元素总数的各种术语。
最常见的似乎是length
,count
和size
。
例如。
array.length
vector.size()
collection.count
有没有首选的用语?它取决于收集的类型吗?即。可变/不变
是否首选将其作为属性而不是方法?
Answers:
Length()
倾向于引用连续的元素-例如,字符串的长度。
Count()
往往是指较宽松的集合中的元素数量。
Size()
往往是指集合的大小,在矢量(或字符串)等情况下,长度通常可能与长度不同,字符串中可能有10个字符,但保留了20个字符。元素-检查源/文档。
Capacity()
-用于专门指代集合中分配的空间,而不是其中的有效元素数量。如果类型同时定义了“容量”和“大小”,则“大小”通常是指实际元素的数量。
我认为重点在于人类语言和习惯用语,字符串的大小似乎不太明显,而集合的长度同样令人困惑,即使它们可能用于指代同一事物(元素数量) )中的数据。
size()
是指元素的向量的数量,不其capacity()
......至少在C ++中,我认为是始发vector
s的size
秒。
std::vector
例如(C ++)使用“容量”和“大小”,而分别使用“大小”和“计数”。其实,一切都在std::
使用“大小”为当前元素计数,甚至std::string
(它提供了模板的兼容性和完全相同的“长度”为......人们方便我猜“大小”)。
FWIW(几乎消失了),我更喜欢使用“ Count”,因为它似乎表明它将毫无疑问地返回集合中的元素/项目数。
当面对“长度”或“大小”这两个术语时,我常常想知道(或者甚至被迫重新阅读文档)片刻的东西是否会告诉我集合中有多少个元素或如何集合消耗的字节数。对于打算像数组或字符串这样的单调的集合尤其如此。
但是没有人负责Java,BCL / .Net或C / C ++标准框架/库所使用的命名约定,因此没有人问我,所以您都被它们提出的任何东西所困扰。
如果只有我比我聪明得多,并被任命为比耶恩(Bjarne),你们所有人都可以免于痛苦。
当然,回到现实世界中,您应该尝试使用所使用的语言/平台(例如,size()
在C ++中)使用的任何命名约定。这似乎并不能帮助您解决Array.Length
困境。
这些术语在某种程度上是可以互换的,尽管在某些情况下,我更喜欢一个术语。通常,如果您考虑如何将这个元素的长度/大小/数量以口头形式描述给另一个人,您将获得最佳使用效果?
length()
表示元素具有长度。字符串有长度。您说“一个字符串长20个字符”,对吗?所以它有长度。
size()
表示元素具有大小。例如,文件具有大小。您说“此文件的大小为2 MB”,对吗?所以它有一个大小。
也就是说,字符串也可以具有大小,但是我希望这里还有其他内容。例如,UTF-16字符串的长度可能为100个字符,但是由于每个字符都由两个字节组成,因此我希望大小为200。
count()
非常不寻常 Objective-C使用count作为数组中元素的数量。有人可能会争辩说数组是有长度的(如Java),有大小的(如大多数其他语言)还是有计数。但是,大小可能再次是字节大小(如果数组项是32位int,每个项是4字节)和长度……我不会说“数组长20个元素”,这听起来有点奇怪我。我会说“一个数组有20个元素”。我不确定count是否可以很好地表达出来,但是我认为count在这里是它的简写形式,elementCount()
对于数组来说,它比length()或size()更有意义。
如果您使用编程语言创建自己的对象/元素,则最好使用其他类似元素,因为程序员习惯于使用该术语来访问所需的属性。
length
,但是不同的存储可能使用不同sizes
的存储其数据。Java在java.io.File#length()中也这样认为,但似乎世界其他地方都意见不同。
添加到@gbjbaanb的答案...
如果“属性”暗示对值的公共访问,那么我想说“方法”仅是提供封装和隐藏实现的首选。
您可能会改变关于如何使用count
元素或如何维护元素的想法count
。如果它是一个属性,那么您将陷入困境-如果通过一种方法来访问它,则可以更改基础实现,而不会影响集合的用户。
List.Capacity
C#中也有属性。