Durch die Verwendung einer Reihe von Programmiersprachen und Bibliotheken sind mir verschiedene Begriffe aufgefallen, die für die Gesamtzahl der Elemente in einer Sammlung verwendet werden.
Die am häufigsten zu sein scheint length
, count
und size
.
z.B.
array.length
vector.size()
collection.count
Gibt es einen bevorzugten Begriff? Kommt es darauf an, um welche Art von Sammlung es sich handelt? dh. veränderlich / unveränderlich
Gibt es eine Präferenz dafür, dass es eine Eigenschaft anstelle einer Methode ist?
List.Capacity
Eigentum in C #.Antworten:
Length()
neigt dazu, sich auf zusammenhängende Elemente zu beziehen - eine Zeichenfolge hat beispielsweise eine Länge.Count()
bezieht sich in der Regel auf die Anzahl der Elemente in einer loseren Sammlung.Size()
In der Regel bezieht sich dies auf die Größe der Sammlung. In Fällen wie Vektoren (oder Zeichenfolgen) kann dies häufig von der Länge abweichen. Eine Zeichenfolge enthält möglicherweise 10 Zeichen, der Speicher ist jedoch für 20 reserviert. Sie kann sich auch auf die Anzahl der Zeichen beziehen Elemente - Quelle / Dokumentation prüfen.Capacity()
- Wird verwendet, um speziell auf den zugewiesenen Speicherplatz in der Sammlung und nicht auf die Anzahl der gültigen Elemente darin zu verweisen. Wenn für den Typ sowohl "Kapazität" als auch "Größe" definiert ist, bezieht sich "Größe" normalerweise auf die Anzahl der tatsächlichen Elemente.Ich denke, der Hauptpunkt liegt in der menschlichen Sprache und den Redewendungen. Die Größe einer Zeichenfolge scheint nicht sehr offensichtlich zu sein, während die Länge eines Satzes ebenso verwirrend ist, obwohl sie möglicherweise verwendet werden, um sich auf dasselbe zu beziehen (Anzahl der Elemente) ) in einer Sammlung von Daten.
quelle
size()
sich auf die Anzahl der Elemente im Vektor bezieht, nicht auf seinecapacity()
… zumindest in C ++, das meiner Meinung nach der Urheber vonvector
s mitsize
s ist.std::vector
(C ++) verwendet beispielsweise "Kapazität" und "Größe", wobei Sie "Größe" bzw. "Anzahl" verwenden. Tatsächlich verwendet alles instd::
"Größe" für die aktuelle Elementanzahl, sogarstd::string
(was "Größe" für Vorlagenkompatibilität und eine völlig identische "Länge" für ... menschliche Bequemlichkeit bietet, denke ich).FWIW (und das ist so gut wie nichts), ich bevorzuge 'Count', weil es darauf hindeutet, dass die Anzahl der Elemente / Elemente in der Sammlung ziemlich eindeutig zurückgegeben wird.
Wenn ich mit den Begriffen "Länge" oder "Größe" konfrontiert werde, frage ich mich oft für einen Moment (oder bin sogar gezwungen, die Dokumentation erneut zu lesen), ob das verdammte Ding mir sagen wird, wie viele Elemente sich in der Sammlung befinden oder wie viele Bytes, die die Sammlung verbraucht. Dies gilt insbesondere für Sammlungen, die wie Arrays oder Strings anhänglich sein sollen.
Aber niemand, der für die Namenskonventionen verantwortlich war, die von den Java-, BCL / .Net- oder C / C ++ - Standard-Frameworks / -Bibliotheken verwendet wurden, hat sich die Mühe gemacht, mich zu fragen.
Wenn ich nur viel schlauer wäre als ich und Bjarne heißen würde, könnte euch allen das Elend erspart bleiben ...
Natürlich sollten Sie in der realen Welt versuchen, sich an die Namenskonvention zu halten, die von der von Ihnen verwendeten Sprache / Plattform verwendet wird (z. B.
size()
in C ++). Nicht, dass Ihnen dies bei IhremArray.Length
Dilemma zu helfen scheint .quelle
Die Begriffe sind etwas austauschbar, obwohl ich in einigen Situationen einander vorziehen würde. Normalerweise können Sie die beste Verwendung erzielen, wenn Sie darüber nachdenken, wie Sie die Länge / Größe / Anzahl dieses Elements einer anderen Person mündlich beschreiben würden.
length()
impliziert, dass das Element eine Länge hat. Eine Zeichenfolge hat eine Länge. Sie sagen "eine Zeichenfolge ist 20 Zeichen lang", richtig? Es hat also eine Länge.size()
impliziert, dass das Element eine Größe hat. ZB hat eine Datei eine Größe. Sie sagen "diese Datei hat eine Größe von 2 MB", richtig? Es hat also eine Größe.Das heißt, eine Zeichenfolge kann auch eine Größe haben, aber ich würde hier etwas anderes erwarten. Beispielsweise kann eine UTF-16-Zeichenfolge eine Länge von 100 Zeichen haben, aber da jedes Zeichen aus zwei Bytes besteht, würde ich eine Größe von 200 erwarten.
count()
ist sehr ungewöhnlich. Objective-C verwendet count für die Anzahl der Elemente in einem Array. Man könnte argumentieren, ob ein Array eine Länge (wie in Java), eine Größe (wie in den meisten anderen Sprachen) oder eine Anzahl hat. Die Größe könnte jedoch wieder die Größe in Byte (wenn die Array-Elemente 32 Bit int sind, ist jedes Element 4 Byte) und die Länge sein ... Ich würde nicht sagen, dass "ein Array 20 Elemente lang ist", was ziemlich seltsam klingt mich. Ich würde sagen "ein Array hat 20 Elemente". Ich bin mir nicht sicher, ob count das sehr gut ausdrückt, aber ich denke, count ist hier eine Kurzform fürelementCount()
und das ist für ein Array wiederum viel sinnvoller als length () oder size ().Wenn Sie eigene Objekte / Elemente in einer Programmiersprache erstellen, verwenden Sie am besten alle ähnlichen Elemente, da Programmierer es gewohnt sind, mit diesem Begriff auf die gewünschte Eigenschaft zuzugreifen.
quelle
length
, aber unterschiedliche Speicher verwenden möglicherweise unterschiedlichesizes
zum Speichern ihrer Daten. Java glaubt das auch in java.io.File # length () , aber es scheint, als ob der Rest der Welt anderer Meinung ist.Count ist meiner Meinung nach der naheliegendste Begriff, wenn Sie nach der Anzahl der Elemente in einer Sammlung suchen. Das sollte sogar neuen Programmierern klar sein, die sich noch nicht besonders an eine bestimmte Sprache gebunden haben.
Und es sollte eine Eigenschaft sein, wie es ist: eine Beschreibung (auch bekannt als Eigenschaft) der Sammlung. Eine Methode würde bedeuten, dass sie etwas mit der Sammlung tun muss, um die Anzahl der Elemente zu ermitteln, und das scheint einfach nicht intuitiv zu sein.
quelle
Hmm ... ich würde keine Größe verwenden. Weil dies mit der Größe in Bytes verwechselt werden kann. Länge - könnte für Arrays sinnvoll sein, solange sie konsequente Speicherbytes verwenden sollen. Obwohl ... Länge ... in was? Die Zählung ist klar. Wie viele Elemente. Ich würde count verwenden.
Über Eigenschaft / Methode würde ich Eigenschaft verwenden, um es schnell zu markieren, und Methode, um es langsam zu markieren.
Und das Wichtigste: Ich würde mich an die Standards der Sprachen / Bibliotheken halten, die Sie verwenden.
quelle
Hinzufügen zu @ gbjbaanbs Antwort ...
Wenn "Eigenschaft" den öffentlichen Zugriff auf den Wert impliziert, würde ich sagen, dass "Methode" bevorzugt wird, um lediglich die Kapselung bereitzustellen und die Implementierung zu verbergen.
Sie können Ihre Meinung darüber ändern, wie
count
Elemente verwendet werden oder wie Sie dies beibehaltencount
. Wenn es sich um eine Eigenschaft handelt, stecken Sie fest. Wenn Sie über eine Methode darauf zugreifen, können Sie die zugrunde liegende Implementierung ändern, ohne die Benutzer der Sammlung zu beeinträchtigen.quelle
In Elixir gibt es tatsächlich ein klares Namensschema, das mit verschiedenen Typen in der Sprache verknüpft ist.
quelle
Für mich ist das ein bisschen so, als würde man fragen, ob "foreach" besser ist als "für jeden". Es kommt nur auf die Sprache / den Rahmen an.
quelle
Ich würde sagen, dass es von einer bestimmten Sprache und Klassen abhängt . Wenn Sie beispielsweise in c # Array verwenden, haben Sie die Eigenschaftslänge . Wenn Sie etwas haben, das von IEnumerable erbt, haben Sie die Erweiterung Method Count (), die jedoch nicht schnell ist. Und wenn Sie von ICollection geerbt haben, haben Sie Property Count.
quelle