0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者】参照型、値型について整理してみた

Last updated at Posted at 2020-06-04

#はじめに
プログラムには、値型と参照型というのがあるらしいです。
自分の情報の整理のために書きます。(間違えたことも書いてると思います...)
例を多く使って整理していきます。
間違いなど指摘してくだされば、うれしいです...

また、javascript,TypeScript,C#など、ごちゃごちゃに書いてしまっています。申し訳ないです...

参考サイト1
参考サイト2
参考サイト3
#値型と参照型

  • 値型は、構造体
  • 参照型は、クラス

みたいなかんじらしいです。
これだけだと、よくわからないですね...

##値型 の奴ら (よく使うものだけ...)

  • int
  • double
  • float
  • number
  • bool
  • enum

##参照型 の奴ら (よく使うものだけ...)

  • クラス(newするやつ)
  • 配列
  • オブジェクト

#この2つの違いについて
値型と参照型の違いは
『値型はコピー』、**『参照型はショートカット』**みたいな感じ。

例で考えた方が分かりやすいので、下記で説明

##値型 (number,int,float...の場合)

let num = 0;

change(num);

console.log(num);

function change(num) {
 num = 10;
}

changeメソッドの引数に、変数numをわたして
console.logで変数の中身を見てみると、

num = 0

になりますね。
変数の中身のコピーをchangeメソッドの引数に渡しただけなので変化なしです
では、次...
##参照型 (配列の場合)

let numArr = [0, 1, 2];

change(numArr);

// "numArr = [10, 1, 2]"
console.log(numArr);

function change(numArr) {
 numArr[0] = 10;
}

changeメソッドの引数に、変数numArrをわたしてconsole.logで中身を見てみると、

numArr = [10, 1, 2]

になります。
!?って感じでした...
予想では
numArr = [0, 1, 2]
だったのに...

先ほども言ったように、参照型である配列は
変数に入れた時、変数は中身のショートカットのような扱いになります。

**『ショートカットのような扱い』**をもっと分かりやすく説明すると
下記のような感じになります。

let arr0 = [0, 1, 2];
let arr1 = arr0;
let arr2 = arr1;

arr2[0] = 10;

console.log(arr0);
console.log(arr1);
console.log(arr2);

これも私の予想では
arr0 = [0, 1, 2]
arr1 = [0, 1, 2]
arr2 = [10, 1, 2]
でしたが、
実際に動かすと...

arr0 = [10, 1, 2]
arr1 = [10, 1, 2]
arr2 = [10, 1, 2]

でした...

変数arr0の中身を、変数arr1 arr2に入れると
中身は共通のものになるんですね...

配列を使うときは気を付けたいです...

##じゃあこの場合はどうなるのか...?
さっきまでは、arr[0] = 10;のように配列の中身を変えていました

では、次の場合にはどうなるんだろう..

let arr0 = [0, 1, 2];
let arr1 = arr0;
arr1 = [10, 1, 2];

console.log(arr0);

これを実際に動かすと、console.logでは

arr0 = [0, 1, 2]

と出ます。

この場合は、
『配列の中身を変える』
ではなく、
『新しい配列に入れ替える』
っていう感じになるのかなと思いました。

#まとめ
配列やクラス(とくに配列)を使うときは、値型のように使わないように気を付けないと...
というのが、学べました。

値型と参照型、それぞれの特徴をもっと理解すれば、もっと上手にプログラムを組めるのかなと思います...
値型や参照型について、さらに詳しいことを知っている方がいましたら、コメントなどで教えていただけると嬉しいです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?