変数やクラスのイメージについて
変数は箱なのかという疑問と破壊的、非破壊的挙動
あなたは変数やクラスについてはじめて学んだ時、どんな風なイメージで教わったか。
私がはじめて学んだ時は、「変数とは箱のようなものだ」と教わった。
しかしこれでは少々イメージしづらかった。
というのも、変数は一度データを入れて、取り出したとき、データのコピーと抜き取りに別れていたからだ。
たとえば、こんなコードがあったとする。
// constはconstantの意味で再代入不可の変数宣言
const i = "Hello";
const j = i;
console.log(j); // >>Hello
変数 i のデータをコピーして j に渡している。
このとき本当に箱であれば取り出されたらなくなってしまうのだが、実際のコードではなくならない。
j = i
というのはデータのコピーで別の場所のメモリアドレスにデータがコピーされ保存される。
コピーと抜き取りは、一般的に非破壊的、破壊的と呼ばれており、これは呼び出すメソッドによってどちらかとなる。
今回は代入なので、コピーだ。
破壊的な場合はこうなる。
const numbers = [1, 2, 3];
numbers.pop();
配列の最後、つまり3をとりだす。
変数numbersには[1, 2]が残る。
で、あるならば、変数をイメージするときは「データの塊に名前を付けておいたもの」としたらどうか。
うーむ、破壊的か非破壊的かそれを覚えたうえで変数は「箱」という認識なら問題ないか。
静的型付けについて箱という認識で行くとわかりやすい面があるしやはり「箱」で行くべきか。
クラスについてのイメージとは?
さらにプログラミングをある程度学んでいくとぶち当たる。
それがこのクラス。
いくつかの言語を学んでいると共通してクラスとは「設計図のようなもの」といわれる。
正直分かりずらい。「関数と変数をグループとしたい場合に使う、まとめ役」ではどうか。
設計図という認識では、staticメソッドを学ぶとき分かりづらくなるので、「クラスはインスタンス化という工程を挟んで使いまわしをする」ことを覚えておけばなんとかなるきがする。
結局
手を動かし、サンプルコードを見ながら理解し、今度は自分で変数やクラスを作ってみるのが一番理解しやすい。