質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.46%

  • Ruby

    7946questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

コンテナってつまりなに??

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 870

cheeeeeeese

score 149

皆様質問がございます。よろしくお願い申し上げます。

「はじめてのRuby」第2章 配列とハッシュにて

配列とハッシュは他のオブジェクトへの参照を保持する「コンテナ」とです。

と定義されています。

このとき、コンテナという意味合いが理解できませんのでお教えいただければと思います。


コンテナよりはコレクションと言及したほうがより厳密ではないでしょうか??


合わせて

配列とハッシュは他のオブジェクトへの参照を保持する

という文章の「オブジェクトへの参照」と言う意味合いに関してもお教えいただければと思います。


配列は文字列や数値などのオブジェクトを代入した後、格納されたオブジェクトを取り出せるわけですが,
上記の「他のオブジェクトへの参照を保持する」という表現が格納されたオブジェクトを取り出しますよーという意味合いになるのでしょうか??



それではよろしくお願い申し上げます。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

まず1つ目の「コンテナ」ですが、「コレクション」と同じ意味です。言い方の違いでしかありません。


2つ目ですが、わかり易い例を見せます。
ary = Array.new(3, "foo")
p ary                     #=> ["foo", "foo", "foo"]
ary[0].capitalize!
p ary                     #=> ["Foo", "Foo", "Foo"]  (各要素は同一のオブジェクトである)
上の例でわかるように、配列の中身は直接配列に入っているのではなくて、どこか(Rubyを使う側では知る必要のない場所)にあるオブジェクトを指し示している、ということです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

素人の、~なんだろうなぁ、というレベルの理解ですが・・・

コンテナ も コレクション も、それが指し示しているオブジェクトとしての実体は同じです。
maisumakunさんのご回答の通り「言い方の違い」なのですが、自分は以下のようなニュアンスの違いなのだと理解しています。

【コンテナ】
(複数の)データの入れ物というオブジェクト(=入れ物は一つ)としての実体に注目した場合はコンテナと呼ぶことが多い。
だから、入れ物であるコンテナ(オブジェクト)に、イテレータ(処理して欲しい内容、繰り返し手順)を渡すとよしなにやってくれる。
だから、うんとザックリした言い方をすると、何かを突っ込む

【コレクション】
中から「複数のデータ」を順に取り出して処理して欲しいなぁ~って、処理の内容 や 機能的な面 に関心がある場合は、コレクションと呼ぶ場合が多い。
だから、例えばあるメソッドに対して引数として渡す

それと「参照」ということばについても、誤解を恐れずザックリと説明すれば、シンボリックリンクやショートカットをイメージするとわかりやすいと思います。

ショートカットもシンボリックリンクも、それ自体は「実体」を持っていますが、同時に別の場所にある他の実体を指し示しています。

オブジェクトも、生成元のクラス(型)が持っていた色々な特徴やメソッドなどを引き継いでいますが、インスタンスが生成される度にそれら全部をフルコピーしている訳ではなく、そのまま使える部分は参照を頼りに毎回原本を見に行く、というような感じです。

こんなザックリとした理解ではまずいでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Ruby

    7946questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。