見出し画像

初心者の関門、変数型は宅配便のイメージで理解できる

はじめに

プログラミングを学習していると変数やら型やらいう単語が出てくると思いますが、なんだかよくわからないし、イメージつかないなという方は多いと思います

そんな時は宅配便をイメージすると変数と型を理解することができるかもしれません
それを今回解説してみます


変数型のつまづきポイント

プログラミング学習していると初心者が最初にイメージが難しくなるのが変数型かと思います
↓のような感じのstringやintとかですね(Javaで書いてるつもりで話す)

string mojigata = "文字型です"
int seisu = 10 // 整数型です
float number = 1.234 // 浮動小数点型です

文字型や整数型などは直感で理解できると思いますが、小数と整数型をなんで分けるんだろうと疑問に思ったりするかもしれません


変数は有限個の数しか表現できない

それはコンピュータの仕組みに立ち返って考えると理解できます
コンピュータは0と1の信号をうまく工夫して使用している機械だということは御存じだと思います
コンピュータにおける変数も内部的には2進数で[0101]のように管理されており、これは10進数の整数値で表現すると5に対応することは何となくわかるでしょう
さて、[0101]の4bitで整数値を表した場合、表現できる最大の値は15ですね
15以上の数、例えば255を表現したいときなどは、[11111111]のようにして確保するビットを増やせばよいことが分かると思います
この255は8bitで表現できる最大の数ですね

そして、今話題に上がっているint型は32bitの領域が確保されています
32bitの最大値はおよそ20億です
int型を使えば、20億までの数なら表現できるようなものになっています
逆に言うと、20億を超える数値ははみだしてしまうので取り扱えません
無理やり詰めようとするとおかしな挙動をするのですが、その話は別の記事にしようと思います


変数は数値しか表現できない?

上の説明だと、数値しか表現できないように聞こえますが、例えば、[0001]をaに対応させるということをあらかじめ決めておけば文字を表現することも可能です

アレ?[0101]ってさっきも使ってたけど、ダブらないの?
と思った人がいるかもしれません
そうです普通に使っていたらダブります
それでダブらないようにするための仕組みが「型」になります

このように型を表現しておけば、数値として表現しているのか、文字として表現しているのか、データを区別することができることが分かるでしょう
(int)[0001] -> 1に対応
(string)[0001] -> aに対応


変数は箱のイメージ

上の説明から変数は箱でイメージすると理解が簡単になります
以下のようなイメージですね


データは適切な型で取り扱う必要がある

上のような説明で、データは適切なデータ型として取り扱う必要があることが分かったのではないでしょうか?
というのも整数のラベルを取り間違うと整数の4で定義したつもりが、予期せず文字列のdになっている可能性があります
ここまでくると「型」がなぜ必要かわかってくるのではないかと思います


オブジェクトで躓く人を救済する

さて、しかし上の説明はプリミティブ型と呼ばれるデータなので、理解がしやすいデータになっています
しかし、Javaをやっているとオブジェクトをどうしても取り扱います

↑のようにプリミティブ型でデータ型を理解しているつもりになっても、オブジェクトが出てきたときに、結局型って何だったんだ?と再度わからなくなる初心者は多いと思います
なので、最後に宅配便とデータ型を結びつけるイメージ図を示して、みなさんの型の理解を盤石にしようと思います


宅配便で型のイメージを盤石にする

さて、最初はコードで考えましょう
例えば、ガラス型や生もの型や大荷物型などを定義して変数として利用するシーンがあったとするでしょう
この時の変数化で使ってるGlass glassのGlassやRaw rawFishのRawに戸惑って結局型ってなんだっけとなる初心者は多いのではないのかと思います

// 型定義
class Glass {}
class Raw {}
class BigBaggage {}
// 変数化
Glass glass = new Glass()
Raw rawFish = new Raw()
BigBaggage bigBaggage = new BigBaggage() 

これはこういうイメージです
適切な箱に、適切な荷物が入っている状況ですね

ガラスは割れ物
生ものは要冷蔵
洗濯機は大型の箱に入っています

要は、型というのは箱の規格のことをいうのですね
これが型のイメージでした


不適切な型を使用するとこうなる

また、上記は適切な型管理を行っていた場合ですが、適切な型管理を行っていない場合にデータがどうなるのかのイメージを最後に共有しましょう

例えば、↑で定義したコードをこんな風にしたとしましょう
(※コンパイルエラーが出るので普通は出来ませんが仮にもしこんなことをやっちゃったらというコードです)

Raw glass = new Glass()
BigBaggage rawFish = new Raw()
Glass bigBaggage = new BigBaggage() 

これは宅配便で表すとこういうことです

これはガラスを要冷蔵に詰めているのと一緒です
届くころには割れているかもしれないですね

生ものは大型の箱に入っていますね
この箱は生臭くなっているでしょう

大型の荷物は割れ物の箱に入っていますね
箱が小さかったらそもそも入らないでしょう

端的に言って悲惨ですね


さて、なぜ不適切な型の説明をしたかというと、世の中には型管理を適当に行う言語が存在しており、このような状況が実際に起こっているからです
PythonやJavaScriptやRubyなどがその典型的な言語です
要はすべての荷物を同じ規格の箱に入れちゃっているのですね
万能な箱の規格を作れればいいですが、この世に万能なものなどないということはみなさんもご存じの通りだと思います
想像通り実際にこれらの言語はそういった型管理の部分でよくとちっています


最後に

これで型について理解できたでしょうか?
「型」は荷物を入れる箱の規格だと思っておけばほぼ間違いありません
プログラミングは抽象的な概念が多いので理解しずらいと思います
そんなときは身近なものでイメージするのが大事です





この記事が気に入ったらサポートをしてみませんか?