Al usar varios lenguajes de programación y bibliotecas, noté varios términos usados para el número total de elementos en una colección.
El más común parece ser length
, count
y size
.
p.ej.
array.length
vector.size()
collection.count
¿Hay algún término preferido para ser utilizado? ¿Depende de qué tipo de colección es? es decir. mutable / inmutable
¿Existe alguna preferencia de que sea una propiedad en lugar de un método?
List.Capacity
propiedades en C #.Respuestas:
Length()
tiende a referirse a elementos contiguos: una cadena tiene una longitud, por ejemplo.Count()
tiende a referirse a la cantidad de elementos en una colección más flexible.Size()
tiende a referirse al tamaño de la colección, a menudo esto puede ser diferente de la longitud en casos como vectores (o cadenas), puede haber 10 caracteres en una cadena, pero el almacenamiento está reservado para 20. También puede referirse al número de elementos - verificar fuente / documentación.Capacity()
- se usa para referirse específicamente al espacio asignado en la colección y no al número de elementos válidos en él. Si el tipo tiene definidas "capacidad" y "tamaño", entonces "tamaño" generalmente se refiere al número de elementos reales.Creo que el punto principal se debe al lenguaje humano y a las expresiones idiomáticas, el tamaño de una cadena no parece muy obvio, mientras que la longitud de un conjunto es igualmente confusa a pesar de que podrían usarse para referirse a la misma cosa (número de elementos ) en una recopilación de datos.
fuente
size()
refiere al número de elementos en el vector, no sucapacity()
... al menos en C ++, que creo que es el creador devector
s consize
s.std::vector
(C ++), por ejemplo, utiliza "capacidad" y "tamaño", donde utiliza "tamaño" y "conteo", respectivamente. En realidad, todo lo que sestd::
utiliza en "tamaño" para el recuento de elementos actual, inclusostd::string
(que proporciona "tamaño" para compatibilidad de plantillas y una "longitud" completamente idéntica para ... conveniencia humana, supongo).FWIW (y eso se desvanece casi nada), prefiero 'Count' porque parece indicar que va a devolver el número de elementos / elementos de la colección de manera bastante clara.
Cuando me enfrento a los términos 'Longitud' o 'Tamaño', a menudo me pregunto por un momento (o incluso me veo obligado a volver a leer la documentación) si esa maldita cosa me va a decir cuántos elementos hay en la colección o cómo muchos bytes consume la colección. Esto es particularmente cierto para las colecciones que están destinadas a ser contorneadas como matrices o cadenas.
Pero nadie que fuera responsable de las convenciones de nomenclatura utilizadas por los marcos / bibliotecas estándar de Java, BCL / .Net o C / C ++ se molestó en preguntarme, por lo que todos están atrapados con lo que sea que se les ocurrió.
Si solo fuera mucho más inteligente que yo y me llamaran Bjarne, todos ustedes podrían salvarse de la miseria ...
Por supuesto, en el mundo real, debe tratar de cumplir con cualquier convención de nomenclatura utilizada por el lenguaje / plataforma que está utilizando (por ejemplo,
size()
en C ++). No es que esto parezca ayudarte con tuArray.Length
dilema.fuente
Los términos son algo intercambiables, aunque en algunas situaciones preferiría uno sobre otro. Por lo general, puede obtener el mejor uso si piensa en ¿Cómo describiría la longitud / tamaño / recuento de este elemento verbalmente a otra persona?
length()
implica que el elemento tiene una longitud. Una cadena tiene una longitud. Dices "una cadena tiene 20 caracteres", ¿verdad? Entonces tiene una longitud.size()
implica que el elemento tiene un tamaño. Por ejemplo, un archivo tiene un tamaño. Dices "este archivo tiene un tamaño de 2 MB", ¿verdad? Entonces tiene un tamaño.Dicho esto, una cadena también puede tener un tamaño, pero esperaría algo más aquí. Por ejemplo, una cadena UTF-16 puede tener una longitud de 100 caracteres, pero como cada carácter está compuesto por dos bytes, esperaría que el tamaño sea 200.
count()
Es muy inusual. Objective-C usa el recuento para la cantidad de elementos en una matriz. Se podría argumentar si una matriz tiene una longitud (como en Java), tiene un tamaño (como en la mayoría de los otros idiomas) o tiene un conteo. Sin embargo, el tamaño podría ser nuevamente el tamaño en byte (si los elementos de la matriz son de 32 bits int, cada elemento es de 4 bytes) y la longitud ... No diría "una matriz tiene 20 elementos de largo", eso suena bastante extraño para yo. Yo diría que "una matriz tiene 20 elementos". No estoy seguro si count lo expresa muy bien, pero creo que count es aquí una forma abreviada deelementCount()
y eso nuevamente tiene mucho más sentido para una matriz que length () o size ().Si crea objetos / elementos propios en un lenguaje de programación, es mejor usar cualquier otro elemento similar, ya que los programadores están acostumbrados a acceder a la propiedad deseada usando ese término.
fuente
length
, pero diferentes almacenamientos pueden usar diferentessizes
para almacenar sus datos. Java también lo cree en java.io.File # length () , pero parece que el resto del mundo no está de acuerdo.Contar creo que es el término más obvio para usar si estás buscando la cantidad de elementos en una colección. Eso incluso debería ser obvio para los nuevos programadores que aún no se han apegado particularmente a un idioma dado.
Y debería ser una propiedad, ya que eso es lo que es: una descripción (también conocida como propiedad) de la colección. Un método implicaría que tiene que hacer algo a la colección para obtener el número de elementos y eso parece poco intuitivo.
fuente
Hmm ... no usaría el tamaño. Porque esto podría confundirse con el tamaño en bytes. Longitud: podría tener sentido para las matrices, siempre que se suponga que usen bytes de memoria consecuentes. Aunque ... longitud ... ¿en qué? El recuento es claro. Cuantos elementos Yo usaría contar.
Acerca de la propiedad / método, usaría la propiedad para marcarlo rápido, y el método para marcarlo es lento.
Y lo más importante: me apegaría a los estándares de los idiomas / bibliotecas que está utilizando.
fuente
Agregando a la respuesta de @ gbjbaanb ...
Si "propiedad" implica acceso público al valor, diría que se prefiere "método" simplemente para proporcionar encapsulación y ocultar la implementación.
Puede cambiar de opinión sobre cómo usar
count
elementos o cómo mantenerloscount
. Si es una propiedad, está atascado; si se accede a través de un método, puede cambiar la implementación subyacente sin afectar a los usuarios de la colección.fuente
En Elixir, en realidad, hay un esquema de nomenclatura claro asociado con él en todos los tipos del idioma.
fuente
Para mí, esto es un poco como preguntar si "foreach" es mejor que "para cada uno". Solo depende del lenguaje / marco.
fuente
Yo diría que depende del lenguaje particular que estés usando y de las clases . Por ejemplo, en c # si está utilizando Array, tiene la longitud de la propiedad , si tiene algo que hereda de IEnumerable, tiene la extensión Method Count (), pero no es rápida. Y si heredó de ICollection, tiene Property Count.
fuente