202 votes

nombre, longueur et taille dans une collection

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

Les plus courantes semblent être length , count y size .

eg.

array.length
vector.size()
collection.count

Y a-t-il un terme à utiliser de préférence ? Cela dépend-il du type de collection ? par exemple, mutable/immuable ?

Y a-t-il une préférence pour que ce soit une propriété plutôt qu'une méthode ?

0 votes

Et il y a List.Capacity également en C#.

0 votes

J'espère que les nouvelles langues éviteront les termes ambigus.

266voto

gbjbaanb Points 31045

Length() a tendance à se référer à des éléments contigus - une chaîne de caractères a une longueur par exemple.

Count() tend à se référer au nombre d'éléments d'une collection plus lâche.

Size() tend à se référer à la taille de la collection, souvent cela peut être différent de la longueur dans des cas comme les vecteurs (ou les chaînes), il peut y avoir 10 caractères dans une chaîne, mais le stockage est réservé pour 20. Il peut également faire référence au nombre d'éléments - vérifiez la source/documentation.

Capacity() - utilisé pour faire spécifiquement référence à l'espace alloué dans la collection et non au nombre d'éléments valides qu'elle contient. Si le type est défini à la fois par "capacité" et "taille", la "taille" fait généralement référence au nombre d'éléments réels.

Je pense que le point principal est lié au langage humain et aux idiomes, la taille d'une chaîne de caractères ne semble pas très évidente, tandis que la longueur d'un ensemble est tout aussi déroutante, même si elles peuvent être utilisées pour faire référence à la même chose (nombre d'éléments) dans une collection de données.

8 votes

Alors qu'est-ce qu'une "collection plus lâche" ? Je ne vois pas la différence entre taille et nombre ici.

39 votes

@ben : size = emplacements disponibles, count = éléments réels. size == count lorsque la collection est pleine.

0 votes

@SnOrfus, c'est toujours vrai, mais je voulais parler des collections qui n'ont pas d'éléments contigus significatifs, par exemple une carte ou un dictionnaire. Vous ne diriez pas qu'un ensemble a une longueur de 10 éléments, il y aurait un nombre de 10 éléments dans cet ensemble.

32voto

Michael Burr Points 181287

Pour info (et c'est loin d'être rien), je préfère "Count" parce qu'il semble indiquer qu'il va renvoyer le nombre d'éléments/items dans la collection sans ambiguïté.

Lorsque je suis confronté aux termes "Longueur" ou "Taille", je me demande souvent pendant un moment (ou je suis même obligé de relire la documentation) si cette fichue chose va me dire combien d'éléments se trouvent dans la collection ou combien d'octets la collection consomme. C'est particulièrement vrai pour les collections qui sont destinées à être contingentes, comme les tableaux ou les chaînes de caractères.

Mais personne, parmi les responsables 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 mon avis, alors vous êtes tous coincés avec ce qu'ils ont trouvé.

Si seulement j'étais beaucoup plus intelligent que je ne le suis et que je m'appelais Bjarne, vous n'auriez pas à souffrir...

Bien entendu, dans le monde réel, vous devez essayer de respecter la convention de dénomination utilisée par le langage/la plate-forme que vous utilisez (par exemple, le nom de l'utilisateur), size() en C++). Non pas que cela semble vous aider dans votre Array.Length dilemme.

21 votes

Alors que Longueur et Taille sont des noms, Compter est également un verbe, et peut donc être interprété comme un comptage au moment de l'exécution (O(n)) ou la recherche d'une valeur (O(1)).

1 votes

En effet, c'est exactement comme cela qu'il est utilisé dans LINQ : Enumerable.Count

16voto

Mecki Points 35351

Les termes sont quelque peu interchangeables, bien que dans certaines situations, je préfère l'un plutôt que l'autre. En général, vous pouvez obtenir le meilleur usage si vous pensez à Comment décririez-vous verbalement à une autre personne la longueur/taille/nombre de cet élément ?

length() implique que l'élément a une longueur. Une chaîne de caractères a une longueur. Vous dites "une chaîne de caractères a une longueur de 20 caractères", n'est-ce pas ? Elle a donc 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 ? Il a donc 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, la taille devrait être de 200.

count() est très inhabituel. Objective-C utilise count pour le nombre d'éléments d'un tableau. On pourrait se demander si un tableau a une longueur (comme en Java), une taille (comme dans la plupart des autres langages) ou un nombre. Cependant, la taille pourrait être à nouveau la taille en octets (si les éléments du tableau sont des int 32 bits, chaque élément est de 4 octets) et la longueur... Je ne dirais pas "un tableau a une longueur de 20 éléments", cela me semble plutôt étrange. Je dirais "un tableau a 20 éléments". Je ne suis pas sûr que count exprime cela très bien, mais je pense que count est ici une forme courte de elementCount() et 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, il est préférable d'utiliser ce que d'autres éléments similaires utilisent, puisque les programmeurs ont l'habitude d'accéder à la propriété souhaitée en utilisant ce terme.

0 votes

En suivant votre analogie avec les chaînes de caractères, un fichier doit avoir un fichier length mais des stockages différents peuvent utiliser des sizes pour stocker ses données. Java le pense aussi en java.io.File#length() mais il semble que le reste du monde ne soit pas d'accord.

1 votes

@IvanBalashov Je n'ai jamais utilisé "longueur de fichier" dans mon discours quotidien, pour moi un fichier n'a pas de longueur mais une taille et c'est aussi ce que j'ai écrit dans ma réponse. Chaque fois que nous parlons d'octets bruts, nous parlons de taille, et un fichier sans contenu spécifique plus précis n'est qu'un tas d'octets. La longueur n'est généralement pas utilisée pour exprimer le nombre d'octets mais pour exprimer une accumulation d'éléments reliés entre eux (pour moi, les octets ne sont pas des éléments, mais plutôt des blocs de construction pour former des éléments et ils ne sont pas non plus "reliés entre eux").

5voto

Corin Points 955

Compter est, à mon avis, le terme le plus évident à utiliser si l'on cherche le nombre d'éléments d'une collection. Cela devrait même être évident pour les nouveaux programmeurs qui ne sont pas encore particulièrement attachés à un langage donné.

Et il devrait s'agir d'une propriété, car c'est ce qu'elle est : une description (alias propriété) de la collection. Une méthode impliquerait qu'il faut faire quelque chose à la collection pour obtenir le nombre d'éléments et cela ne semble pas intuitif.

4voto

badbadboy Points 1754

Hmm... Je n'utiliserais pas la taille. Parce que cela pourrait être confondu avec la taille en octets. Longueur - pourrait avoir un certain sens pour les tableaux, tant qu'ils sont censés utiliser des octets de mémoire conséquents. Mais... longueur... en quoi ? Le nombre est clair. Combien d'éléments. J'utiliserais "count".

A propos de propriété/méthode, j'utiliserais propriété pour indiquer qu'il est rapide, et méthode pour indiquer qu'il est lent.

Et, le plus important, je m'en tiendrais aux normes des langues/bibliothèques que vous utilisez.

0 votes

Qu'en est-il d'un DataBlock, juste un tas d'octets. A-t-il une longueur ou une taille ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X