1 00:00:00,330 --> 00:00:01,290 ‫お帰りなさい。 2 00:00:01,320 --> 00:00:05,280 ‫このビデオでは、 値型と参照型の違いについて見ていきます。 3 00:00:05,280 --> 00:00:12,630 ‫そこで、 データ型は、 メモリ上の位置をどのように占有するかによって、 2つに分類される。 4 00:00:13,020 --> 00:00:16,650 ‫そして、 それらの種類を詳しく見ていきます。 5 00:00:16,650 --> 00:00:19,080 ‫そこでまず、 バリュータイプに注目する。 6 00:00:19,080 --> 00:00:29,310 ‫つまり、 その名が示すように、 宣言して値を代入すると、 その値を自分のメモリ空間に直接保持するデータ型である。 7 00:00:29,310 --> 00:00:29,670 ‫わかりました。 8 00:00:29,670 --> 00:00:37,110 ‫つまり、 値型はヒープを使用して値を保存します。 値型の例としては、 int float long double char bool decimal 9 00:00:37,110 --> 00:00:40,230 ‫double などのデータ型があります。 10 00:00:40,230 --> 00:00:45,780 ‫では、 基本的に単純なデータ型はどうなっているのか、 値型を絵で表現してみましょう。 11 00:00:45,780 --> 00:00:51,300 ‫そこで、 Zという新しい変数を作り、 その値が234であるとします。 12 00:00:51,300 --> 00:00:58,860 ‫つまり、 この値234は、 このZ変数の位置にRAMに格納されることになります。 13 00:00:59,370 --> 00:00:59,820 ‫わかりました。 14 00:00:59,820 --> 00:01:05,640 ‫そして、 参照型をさらに詳しく見ていくと、 値を直接メモリに格納するのではなく、 15 00:01:05,670 --> 00:01:12,660 ‫実際のデータのメモリ上の位置だけを格納する変数型であることがわかる。 16 00:01:13,590 --> 00:01:18,870 ‫ここでの変数は、 データのメモリ参照を格納するもので、 データを直接格納するものではありません。 17 00:01:18,900 --> 00:01:20,160 ‫ここが大きな違いです。 18 00:01:20,160 --> 00:01:20,610 ‫そうだろ? 19 00:01:20,610 --> 00:01:30,870 ‫つまり参照データ型は文字列クラスの配列で、 基本的にはより複雑で多くのスペースを必要とする、 いわばデータ型なのです。 20 00:01:31,080 --> 00:01:37,140 ‫これは、 リソースを節約し、 プログラムをできるだけ速くするために行われます。 なぜなら、 そうすれば、 21 00:01:37,140 --> 00:01:40,740 ‫値を取得し、 値を常に移動させる必要がなくなるからです。 22 00:01:40,740 --> 00:01:47,100 ‫でも、 「この値はあの場所にあるから、 そこから取り出せばいいんだ」と言えば、 例えば使うときにそのデータをコピーする代わりに、 23 00:01:47,100 --> 00:01:51,720 ‫「この値はあの場所にあるから、 そこから取り出せばいいんだ」と言うことができます。 24 00:01:52,290 --> 00:01:52,560 ‫わかりました。 25 00:01:52,560 --> 00:01:57,870 ‫ですから、 この参照型のデータ型をコピーしても、 データのメモリアドレスがコピーされるだけなのです。 26 00:01:57,870 --> 00:02:02,940 ‫そのため、 同じデータを指す変数が2つ存在することになります。 27 00:02:02,940 --> 00:02:05,700 ‫では、 ここでピクトグラムの表現を見てみましょう。 28 00:02:05,700 --> 00:02:14,820 ‫つまり、 最初のDennisという文字列があり、 次に変数値のアドレス、 そして実際の値があります。 29 00:02:14,820 --> 00:02:17,130 ‫ということがここでわかりますね。 30 00:02:18,210 --> 00:02:27,810 ‫この値は、 ここに見えるアドレスだけですが、 変数名のアドレスはこっちです。 31 00:02:27,810 --> 00:02:35,430 ‫つまり、 変数値のアドレスと実際の値は、 RAMの2つの異なる場所に保存されているのです。 32 00:02:35,610 --> 00:02:40,680 ‫だから全体的に可変値アドレスは超短いんです。 33 00:02:40,710 --> 00:02:43,830 ‫本当にごく基本的な数字ですよね。 34 00:02:43,830 --> 00:02:48,270 ‫しかし一方で、 実際の値はかなり複雑なものになります。 35 00:02:48,270 --> 00:02:52,800 ‫つまり、 かなり複雑で、 多くの情報が格納されている物体かもしれません。 36 00:02:52,800 --> 00:02:58,380 ‫だからこそ、 私たちの番組でも、 Cシャープ全般でも、 この方法を使った方がいいんです。 37 00:02:59,800 --> 00:03:04,690 ‫では、 レンタルに行くからには、 車を手に入れたいとします。 38 00:03:04,720 --> 00:03:05,050 ‫そうですね。 39 00:03:05,050 --> 00:03:11,240 ‫レンタカーに行き、 カウンターで、 注文した車を受け取るわけです。 40 00:03:11,260 --> 00:03:16,270 ‫まあ、 カウンターはあなたの車を持ってないが、 あなたの車の位置は知っている。 41 00:03:16,270 --> 00:03:26,500 ‫キーが渡され、 「この方向に行けば、 ○○列目、 ○○階、 ○○階に車がありますよ」と教えてくれるわけです。 42 00:03:26,500 --> 00:03:30,160 ‫そうすれば、 そこに行けば、 車を受け取ることができるわけです。 43 00:03:30,160 --> 00:03:36,310 ‫この例では、 他の複雑な部分が少し欠けていますが、 車をカウンターの中に格納するのではなく、 44 00:03:36,310 --> 00:03:47,860 ‫車のある場所をすべて参照することで、 簡単に車をピックアップできるようにしているのです。 45 00:03:47,860 --> 00:03:53,260 ‫でも、 これで少しはリファレンス型への理解が深まるかもしれませんね。 46 00:03:53,920 --> 00:03:54,460 ‫わかりました。 47 00:03:54,460 --> 00:03:55,600 ‫ということで、 ひとまず終了です。 48 00:03:55,600 --> 00:03:56,980 ‫コーディに戻ろう。 49 00:03:57,010 --> 00:03:58,210 ‫では、 次のビデオでお会いしましょう。