変数とは?
- 値の入った箱である
x = 1
「xという名前の箱に値 1 が入っている」
オブジェクトは値か?
- 1 や「かわの」は値と言っていいだろう
- オブジェクトは・・・値とは言えないものも多い気がする!
var httpClient = new HttpClient();
// HTTPリクエストを送ってくれるオブジェクトは「値」とは思えない!
参照
- オブジェクトはメモリ上のどこかに存在し、その場所はメモリの番地(参照値)で特定できる
- オブジェクトを操作するための変数には、メモリの番地(参照値)が入る
- こういう変数を「参照型変数」と呼ぶ
- 参照型変数は変数の値として「参照値」を保持し、オブジェクトを「参照」する
- イメージとしては変数からオブジェクトを「指さしている」
- 「番地」は値と言えないことはないので、依然として変数の中には「値」が入っていると考えられる
イメージ
オブジェクトの操作(1/2)
- 参照を通してオブジェクトを操作することができる
Person p = new Person();
p.Age = 20;
オブジェクトの操作(2/2)
var ary = [1,2,3];
var d = ary.map(i -> i * i);
配列もオブジェクト!
参照の連鎖
オブジェクトの中に更に参照を持つことが出来る
var ary = [ { name: 'kawano' }, { name: 'tomo' }, { name: 'Haskell' } ];
構造体
- C#の構造体は「オブジェクトみたいな値」
- 変数の中に値が格納される
- 正直、使いどころが難しい。。。
参照の怖いところ(1/2)
- 参照は容易に複製できる
- 同じオブジェクトへの参照がばらまかれると手に負えないバグの温床となる
参照の怖いところ(2/2)
- 指さしている先に実はオブジェクトがいなかったら・・・?
- これが$10億の損失「null参照」
最後に
- JavaScript/Java/C#など、よく使われる言語はオブジェクトを備えていることが多い
- 参照の便利さと怖さ、両方を知っておくことが重要
- 値を変更できない言語もある!:Haskell/Elm