Question

En utilisant un certain nombre de langages de programmation et de bibliothèques, j'ai remarqué divers termes utilisés pour désigner le nombre total d'éléments dans une collection.

Les plus courantes semblent être longueur , nombre et taille .

par exemple.

array.length
vector.size()
collection.count

Y a-t-il un terme préféré à utiliser? Cela dépend-il du type de collection dont il s'agit? c'est à dire. mutable / immuable

Existe-t-il une préférence pour qu'il s'agisse d'une propriété plutôt que d'une méthode?

Était-ce utile?

La solution

Length () a tendance à faire référence à des éléments contigus - une chaîne a une longueur par exemple.

Count () a tendance à faire référence au nombre d'éléments dans une collection plus souple.

Taille () a tendance à faire référence à la taille de la collection. Elle peut souvent être différente de la longueur dans le cas de vecteurs (ou de chaînes), il peut y avoir 10 caractères dans une chaîne, mais le stockage est réservé à 20. Il peut également faire référence au nombre d’éléments - vérifiez l’origine / la documentation.

Capacity () - utilisé pour désigner spécifiquement l'espace alloué dans la collection et non le nombre d'éléments valides qu'il contient. Si le type a les deux "capacité" et " taille " défini ensuite " taille " fait généralement référence au nombre d'éléments réels.

Je pense que l’essentiel est lié au langage et aux idiomes humains, la taille d’une chaîne ne semble pas très évidente, alors que la longueur d’un ensemble est tout aussi déroutante, même s’ils peuvent être utilisés pour désigner la même chose ( nombre d'éléments) dans une collection de données.

Autres conseils

FWIW (et c’est presque nul), je préfère 'Count' car cela semble indiquer que le nombre d’éléments / éléments de la collection sera renvoyé sans aucune ambiguïté.

Quand je suis confronté aux termes "Longueur" ou "Taille", je me demande souvent un instant (ou même que je suis obligé de relire la documentation) si la fichue chose va me dire combien d'éléments sont dans le collection ou combien d'octets la collection consomme. Cela est particulièrement vrai pour les collections destinées à être contingentes, comme des tableaux ou des chaînes.

Mais personne responsable des conventions de nommage utilisées par les frameworks / bibliothèques standard Java, BCL / .Net ou C / C ++ n'a pris la peine de me demander, vous êtes donc tous coincés avec ce qu'ils ont proposé.

Si seulement j'étais beaucoup plus intelligent que moi et que je m'appelais Bjarne, vous pourriez tous être épargnés par la misère ...

Bien sûr, dans le monde réel, vous devriez essayer de vous en tenir à la convention de nommage utilisée par le langage / la plateforme que vous utilisez (par exemple, size () en C ++). Cela ne semble pas vous aider à résoudre votre dilemme Array.Length .

Les termes sont quelque peu interchangeables, bien que dans certaines situations, je préférerais les uns aux autres. En règle générale, vous pouvez obtenir le meilleur usage possible si vous réfléchissez à Comment décririez-vous la longueur / la taille / le nombre de cet élément verbalement à une autre personne? .

length () implique que l'élément a une longueur. Une chaîne a une longueur. Vous dites "une chaîne de 20 caractères", n'est-ce pas? Donc, il a une longueur.

size () implique que l'élément a une taille. Par exemple. un fichier a une taille. Vous dites "Ce fichier a une taille de 2 Mo", n'est-ce pas? Donc, il a une taille.

Cela dit, une chaîne peut aussi avoir une taille, mais je m'attendrais à autre chose ici. Par exemple. une chaîne UTF-16 peut avoir une longueur de 100 caractères, mais comme chaque caractère est composé de deux octets, sa taille devrait être de 200.

count () est très inhabituel. Objective-C utilise count pour le nombre d'éléments dans un tableau. On pourrait discuter si un tableau a une longueur (comme en Java), une taille (comme dans la plupart des autres langues) ou un nombre. Cependant, taille peut être à nouveau la taille en octet (si les éléments du tableau ont 32 bits, chaque élément est de 4 octets) et la longueur ... Je ne dirais pas "un tableau est long de 20 éléments", cela semble plutôt étrange pour moi. Je dirais "un tableau a 20 éléments". Je ne sais pas si count exprime cela très bien, mais je pense que count est ici une forme abrégée de elementCount () et que cela a beaucoup plus de sens pour un tableau que length () ou size () .

Si vous créez vos propres objets / éléments dans un langage de programmation, utilisez de préférence des éléments similaires, car les programmeurs ont l'habitude d'accéder à la propriété souhaitée à l'aide de ce terme.

Je pense que le compte est le terme le plus évident à utiliser si vous recherchez le nombre d’articles dans une collection. Cela devrait même être évident pour les nouveaux programmeurs qui ne sont pas encore particulièrement attachés à une langue donnée.

Et ce devrait être une propriété comme c'est ce qu'elle est: une description (propriété aka) de la collection. Une méthode impliquerait qu’elle doive faire quelque chose à la collection pour obtenir le nombre d’éléments et que cela ne semble pas intuitif.

Hmm ... je n'utiliserais pas la taille. Parce que cela pourrait être confondu avec la taille en octets. Longueur - pourrait avoir un sens pour les tableaux, dans la mesure où ils sont supposés utiliser les octets conséquents de mémoire. Bien que ... longueur ... dans quoi? Le compte est clair. Combien d'éléments. J'utiliserais le compte.

À propos de la propriété / méthode, j'utiliserais propriété pour marquer sa rapidité, et méthode pour marquer sa lenteur.

Et le plus important - je m'en tiendrai aux normes des langages / bibliothèques que vous utilisez.

Ajout à la réponse de @ gbjbaanb ...

Si " propriété " implique un accès public à la valeur, je dirais que la "méthode" est préférable simplement de fournir une encapsulation et de masquer la mise en œuvre.

Vous pourriez changer d'avis sur la façon de compter d'éléments ou sur la gestion de ce compte . S'il s'agit d'une propriété, vous êtes bloqué. Si vous y accédez via une méthode, vous pouvez modifier l'implémentation sous-jacente sans affecter les utilisateurs de la collection.

Dans Elixir, un schéma de nommage clair lui est associé entre les types du langage.

  

Lorsque vous "comptez" le nombre d'éléments dans une structure de données, Elixir   respecte également une règle simple: la fonction est nommée taille si le   le fonctionnement est en temps constant (c.-à-d. que la valeur est pré-calculée) ou    longueur si l'opération est linéaire (c'est-à-dire que le calcul de la longueur est   plus lentement à mesure que l’entrée augmente).

Pour moi, cela revient un peu à demander si "foreach" est meilleur que "pour chaque". Cela dépend du langage / du framework.

Je dirais que cela dépend du langage que vous utilisez et des classes . Par exemple, en c # si vous utilisez Array, vous avez Propriété Longueur, si vous héritez de IEnumerable, vous avez l'extension Méthode Count (), mais elle n'est pas rapide. Et si vous avez hérité de ICollection, vous avez Propriété Nombre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top