多数のプログラミング言語とライブラリを使用して、コレクション内の要素の総数にさまざまな用語が使用されていることに気付きました。
最も一般的なのはlength
、count
、およびのようですsize
。
例えば。
array.length
vector.size()
collection.count
使用する優先用語はありますか?コレクションの種類によって異なりますか?すなわち。可変/不変
メソッドではなくプロパティであるという好みはありますか?
多数のプログラミング言語とライブラリを使用して、コレクション内の要素の総数にさまざまな用語が使用されていることに気付きました。
最も一般的なのはlength
、count
、およびのようですsize
。
例えば。
array.length
vector.size()
collection.count
使用する優先用語はありますか?コレクションの種類によって異なりますか?すなわち。可変/不変
メソッドではなくプロパティであるという好みはありますか?
Length()
連続する要素を参照する傾向があります。たとえば、文字列には長さがあります。
Count()
より緩いコレクションの要素の数を参照する傾向があります。
Size()
コレクションのサイズを参照する傾向があります。多くの場合、これはベクトル(または文字列)の場合の長さとは異なる場合があります。文字列には10文字が含まれる場合がありますが、ストレージは20文字に予約されています。要素-ソース/ドキュメントを確認してください。
Capacity()
-コレクション内の有効な要素の数ではなく、コレクション内の割り当てられたスペースを具体的に参照するために使用されます。タイプに「容量」と「サイズ」の両方が定義されている場合、「サイズ」は通常、実際の要素の数を指します。
重要なのは人間の言語とイディオムにあると思います。文字列のサイズはあまり明白ではないようですが、セットの長さは同じもの(要素の数)を参照するために使用される場合でも同様に混乱します)データのコレクション内。
用語は多少互換性がありますが、状況によっては、どちらか一方を好む場合があります。通常、この要素の長さ/サイズ/数を他の人に口頭でどのように説明しますか?
length()
要素に長さがあることを意味します。文字列には長さがあります。「文字列の長さは 20 文字です」と言いますよね?なので長さがあります。
size()
要素にサイズがあることを意味します。たとえば、ファイルにはサイズがあります。「このファイルのサイズは 2 MB です」と言いますよね?なのでサイズがあります。
そうは言っても、文字列にもサイズを指定できますが、ここでは別のことを期待しています。たとえば、UTF-16 文字列の長さは 100 文字かもしれませんが、すべての文字が 2 バイトで構成されているため、サイズは 200 になると予想されます。
count()
非常に珍しいです。Objective-C では、配列内の要素数に count を使用します。配列に (Java のように) 長さがあるか、(他のほとんどの言語のように) サイズがあるか、またはカウントがあるかについて議論する人がいるかもしれません。ただし、サイズはバイト単位のサイズ (配列項目が 32 ビット int の場合、各項目は 4 バイト) と長さである可能性があります...「配列の長さは 20 要素です」とは言いません。自分。「配列には20個の要素があります」と言います。count がそれをうまく表現しているかどうかはわかりませんが、ここでの count は の短縮形であり、 orelementCount()
よりも配列の方がはるかに理にかなっていると思います。length()
size()
プログラミング言語で独自のオブジェクト/要素を作成する場合、プログラマーはその用語を使用して目的のプロパティにアクセスすることに慣れているため、他の同様の要素が使用するものを使用することをお勧めします。
カウントコレクション内のアイテムの数を探している場合に使用する最も明白な用語だと思います。これは、特定の言語にまだ特に執着していない新しいプログラマーにとっても明らかなはずです。
そして、それはそれが何であるかということであるプロパティでなければなりません:コレクションの説明(別名プロパティ)。メソッドは、アイテムの数を取得するためにコレクションに対して何かを行う必要があることを意味し、それは直感的ではないように思われます。
うーん...私はサイズを使用しません。これはバイト単位のサイズと混同される可能性があるためです。長さ - メモリの結果のバイトを使用することになっている限り、配列にはある程度の意味があります。でも...長さ...何に?カウントはクリアです。要素の数。カウントを使用します。
プロパティ/メソッドについては、プロパティを使用して高速であることをマークし、メソッドを使用して低速であることをマークします。
そして、最も重要なことは、使用している言語/ライブラリの標準に固執することです。
@gbjbaanbの答えに追加しています...
「プロパティ」が値へのパブリックアクセスを意味する場合、単にカプセル化を提供し、実装を非表示にするために「メソッド」が好ましいと言えます。
count
どのように要素を作成するか、またはそれをどのように維持するかについて気が変わるかもしれませんcount
。プロパティの場合は行き詰まります。メソッドを介してアクセスする場合は、コレクションのユーザーに影響を与えることなく、基になる実装を変更できます。
Elixir には、実際には、言語の型全体に関連付けられた明確な命名スキームがあります。
データ構造の要素数を「カウント」するとき、Elixir は単純な規則にも従います:
size
操作が一定時間内にある場合 (つまり、値が事前に計算されlength
ている場合)、または操作が線形である場合 (つまり、計算中) に関数に名前が付けられます。入力が大きくなるにつれて長さが遅くなります)。
私にとって、これは「foreach」が「for each」よりも優れているかどうかを尋ねるようなものです。それは言語/フレームワークに依存します。