1
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?

オブジェクト指向の勘所「参照」の考え方

Last updated at Posted at 2024-10-23
1 / 12

変数とは?

  • 値の入った箱である
x = 1

「xという名前の箱に値 1 が入っている」


オブジェクトは値か?

  • 1 や「かわの」は値と言っていいだろう
  • オブジェクトは・・・値とは言えないものも多い気がする!
var httpClient = new HttpClient();
// HTTPリクエストを送ってくれるオブジェクトは「値」とは思えない!

参照

  • オブジェクトはメモリ上のどこかに存在し、その場所はメモリの番地(参照値)で特定できる
  • オブジェクトを操作するための変数には、メモリの番地(参照値)が入る
  • こういう変数を「参照型変数」と呼ぶ
  • 参照型変数は変数の値として「参照値」を保持し、オブジェクトを「参照」する
  • イメージとしては変数からオブジェクトを「指さしている」
  • 「番地」は値と言えないことはないので、依然として変数の中には「値」が入っていると考えられる

イメージ

image.png


オブジェクトの操作(1/2)

  • 参照を通してオブジェクトを操作することができる
Person p = new Person();
p.Age = 20;

image.png


オブジェクトの操作(2/2)

var ary = [1,2,3];
var d = ary.map(i -> i * i);

配列もオブジェクト!


参照の連鎖

オブジェクトの中に更に参照を持つことが出来る

var ary = [ { name: 'kawano' }, { name: 'tomo' }, { name: 'Haskell' } ]; 

image.png


構造体

  • C#の構造体は「オブジェクトみたいな値」
  • 変数の中に値が格納される
  • 正直、使いどころが難しい。。。

参照の怖いところ(1/2)

  • 参照は容易に複製できる
  • 同じオブジェクトへの参照がばらまかれると手に負えないバグの温床となる

image.png


参照の怖いところ(2/2)

  • 指さしている先に実はオブジェクトがいなかったら・・・?
  • これが$10億の損失「null参照」

image.png


最後に

  • JavaScript/Java/C#など、よく使われる言語はオブジェクトを備えていることが多い
  • 参照の便利さと怖さ、両方を知っておくことが重要
  • 値を変更できない言語もある!:Haskell/Elm
1
0
2

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
1
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?