はじめに
プログラミング初心者向けの資料や、入門用の技術書において、変数を「箱」で説明しているのをよく見かけます。
私も「変数って箱のようなもの」と教わってきましたし、比較的分かりやすい比喩であると思っています。
ただ、箱で説明するには限界があるというか、もっと良い比喩があるのではないかと思いました。
特に、参照型の変数を表す場合、「箱の中に値そのものではなく、参照が入っている」と説明するのは、初めてプログラミングを学ぶ人にとっては難しいのではないかと思っています。
もちろん(プログラムについて知っている今なら)メモリアドレスのことを指しているのは分かりますが、プログラミング初心者の人にとってはイメージしづらいのではないでしょうか。
そこで今回、プログラミング初心者向けに変数を説明するなら「箱」ではなく「付箋」に例えた方が分かりやすいのではという結論に達しました。
もっと他に良い例えがあったり、付箋ではこんなところが説明できないなどありましたら、コメントいただけると嬉しいです。
前提
以下の条件を想定しています。
- 対象はプログラミングの初学者
- 目的は「変数とは何か」理解してもらい、サンプルコードで行なっていることを理解してもらうこと
- 言語はJava(何でも良いのですが、記事の中で出てくるサンプルコードはJavaにしました。)
付箋で説明
それでは、付箋に例えて説明します。
変数とは、一言でいうと「1枚1枚に名前が付いた、色つきの付箋」のようなものです。
変数は「情報の保存と記録」のために使う
まず、変数の機能を説明します。
普段の生活の中で、付箋は「買い物リスト」や「伝言メモ」など、ちょっとした情報を記録しておくために使っています。
買い物をする場合、まず買いたいものを付箋に書き、スーパーに到着したら付箋を見て「買いたいと思っていたもの」を確認します。
ここでは、情報(=買いたいもの)の保存と取得を行っています。
プログラムの世界で、買い物リストの役割を担うものが「変数」です。
変数は「情報の保存」と「情報の取得」を行うために利用します。
情報を保存すること(=付箋に書き込むこと)を「変数に代入する」と言います。
これをコードして表現すると、以下のようになります。(クラス定義やmain関数は省略)
item
が変数です。
String item = "りんご"; // 情報を保存(=itemという変数に代入)
System.out.println("買うものは" + item + "です"); // 情報を取得して表示
// 実行結果
買うものはりんごです
余談ですが、買い物メモは買い物が終わったらゴミ箱に捨てちゃうのと同じように、変数も役目が終わったら消えてしまいます。
変数には「名前」をつける
普段の生活の中で、付箋1つ1つに名前を付けて呼んでいることはないと思いますが、「この付箋」とか「冷蔵庫に貼ってある付箋」など、たくさんある付箋を識別して特定の付箋を指定しています。
プログラムでも同様で、複数存在する変数を識別する必要があり、変数1つ1つに名前(変数名)をつけます。
イメージでは、「付箋1枚1枚に名前をつける」感じです。(←ちょっと分かりづらいかな。この点では箱にラベルを貼る方が分かりやすい。)
先ほどの例では、item
という変数名をつけています。
String item = "りんご";
これによって、item
という名前で情報を取得することができます。
System.out.println("買うものは" + item + "です");
// 実行結果
買うものはりんごです
変数にはデータ型が存在する
変数には「データ型」という型が存在し、データ型に一致しない値は変数に代入することができません。
付箋の例で言うと、「黄色の付箋には数字しか書けない。赤色の付箋には文字列しか書けない。というルールが決まっている。」という感じです。
現実世界では、付箋に文字を書いても絵を描いてもOKですが、プログラムの世界では決まった型しか代入できないルールになっています。
先ほどの例では、item
という変数には文字列(String型)しか代入できません。
// OK
String item = "りんご";
// NG
String item = 10; // 10は文字列ではなく数値なので代入できない。
よく使うデータ型は以下です。(これはルールとして覚えるしかないです。)
int : 整数を表す型(例:10)
double : 小数を表す型(例:0.5)
String : 文字列を表す型(例:こんにちは)
boolean : trueかfalseのどちらかの値を表す型
変数には基本型と参照型という種類がある
変数は大きく分けて「基本型」と「参照型」という2種類に分類することができます。
基本型変数は「付箋に値そのものが書いてある」イメージです。
基本型にはint
型、double
型、boolean
型が含まれます。
一方、参照型は「付箋に『ノートの〇〇ページを見てね!』と書いてあり、該当のページに値が書いてある」イメージです。
参照型はString
型や、配列、クラス型が含まれます。
参照型変数を付箋で説明すると
参照型変数の注意点として、値は同じでも参照先が異なる場合があることです。
String nameA = new String("太郎");
String nameB = new String("太郎");
System.out.println( nameA == nameB ) // falseが出力
これは、nameA
の付箋には「1ページを見てね!」と書いてあり、nameB
の付箋には「2ページを見てね!」と書いてあることと同じなので、nameA
とnameB
は別々のものであるということです。1ページと2ページにはどちらも「太郎」と書いてあります。
箱に「参照が入っている」という説明よりは想像がしやすいのではないでしょうか。
また、この比喩を用いると、インスタンス変数に含まれるプロパティも説明できます。
インスタンス変数は参照型の変数なので、付箋には「ノートの〇ページを見てね!」と書いてあります。
該当のページには、いくつかの付箋(プロパティ)が張られているイメージです。
おわりに
全体的にざっくりとした説明になってしまいましたが、「箱」ではなく「付箋」でも変数の説明ができるのではないでしょうか。
どんな例に例えると分かりやすいかは人それぞれだと思います。
今回の記事は、「変数のことを箱って説明されたけど、よくわからない」と感じた方の役に立ててれば嬉しいです。