これは何?
C++ の vector とかは「コンテナ」。
Java の List とかは「コレクション」。
こういう言葉遣いって他はどうなってるのかなと思って、軽く調べて列挙してみた。
コンテナ
- C++ の STL コンテナ
- go の heap, list, ring のパッケージ名が container
こうしてみると、コンテナは少数派っぽい。
コレクション
- Java のコレクションクラス
- .NET Framework のコレクションクラス
- Rust の
std::collections
- go の sort の説明が「Package sort provides primitives for sorting slices and user-defined collections.」となっている。
- Swift Standard Library を見ると、配列や辞書のことを collection と呼んでいる。
- Dart の Deque とか List は collection ライブラリに入っている。
だいたいみんなこっちなんだなと思った。
コレクションとコンテナ
- Python で deque とかが入っているライブラリを説明する資料 の冒頭に「collections — Container datatypes」とある。
- Julia で、append! の説明に「For an ordered container collection, add the elements of each collections to the end of it.」とある。
この例を見ると、英語ネイティブの方々はわりとどうでもいいと思っているのかな、と思うけどどうなんだろ。
アグリゲート
- C/C++ で、配列・構造体・共用体 の総称。日本語だと「集成体」。
まとめ
コンテナは少数派、だいたいみんなコレクションっぽい。
新しくそういう構造を作る場合、その言語などの文化圏にあった名前を使うのが良いと思う。
そういう意味で、C言語は困る。C言語で(事実上)標準となっているそういうものはたぶんないので、良さげな名前を勝手に決める必要がある。