プログラムでは必ず「データ」を扱います。データを扱わないプログラムは存在しません。
そして、プログラムの中でデータを扱っていくためには、「変数」と「データ型」についての理解は必須となります。
今回の記事では、プログラミングにおいて基本であり、最も大事と言えるそれら「変数」と「データ型」について考えていきます。
変数とは
「変数」はJavaに限らず全てのプログラミング言語で共通の概念であり、プログラミングをする上で、必ず使われるものです。
ではあらためて、変数とは何でしょう。
学校の数学で「x」とか「y」とか変数を習ったと思います。値が「変」わる「数」、つまり「変数」です。プログラミングの世界でもそれと同じです。
変数は、データを一時的に記憶しておくための領域に固有の名前を付けたもので、変数につけた名前を「変数名」と呼び、記憶されているデータをその変数の「値」と言います。
形式ばって書くとわかりずらいですが、要は「値を入れたり取り出したりできる箱」のようなものと考えるとわかりやすいでしょう。
例えば、以下のソースコードを考えます。
int x;
x = 1;
これは「int型」の箱に、「x」という名前を付けて、その中に「1」を入れる、という意味です。
1ステートメント(1文)ずつ考えていくと、まず「int x;」では下図のような命令を示しています。
次に、「x = 1;」は下図のようなイメージです。
これらを形式的な表現で前述のソースコードがやっていることを表すと、
1行目で変数「x」を宣言し、2行目で変数「x」に「1」という値を代入している。
と、なります。
変数宣言
ここまで変数のさわりについて見てきました。ここからはもう少し形式的な解説をしていきます。
プログラムは必ず「データ」を扱います。データはファイルから読み込んだり、利用者がキーボードから打ち込んだりして、プログラムに渡してやることになります。
「そのデータを使って何らかの処理を行う」というのがプログラムの役割です。
そして、データを格納しておく領域が必要です。それが「変数」です。
変数、つまり値を入れておく箱はソースコードの中で用意してやる必要があります。
その「変数を用意する」ことを「変数宣言」と言います。
変数宣言は以下のように記述します。
型名 変数名;
上記のように変数宣言することで、新しく変数が作られ、使用できるようになります。
Javaデータ型
さて、変数宣言の節で、「型名」という新しい用語が出てきましたが、その「型」とは何でしょう。
変数には様々な種類があります。数字を入れる箱、文字を入れる箱、小数を入れる箱など、値の種類によって別々の箱を用意してやる必要があります。
その種類の総称を「型」もしくは「データ型」と言います。
Javaでは下記のようなデータ型が用意されています。
型名 | データ種別 | バイト長 | 数値範囲 |
---|---|---|---|
boolean | 真or偽 | 不定(環境依存) | true or false |
byte | 整数 | 1バイト | -128 ~ +127 |
char | 1文字 | 2バイト | 0 ~ 65535 |
short | 整数 | 2バイト | -32768 ~ +32767 |
int | 整数 | 4バイト | -2147483648 ~ +2147483647 |
long | 整数 | 8バイト | -2^63 ~ +2^63-1 |
float | 小数 | 4バイト | 約±3.4×(10の38乗)~約±1.4×(10の-45乗) |
double | 小数 | 8バイト | 約±1.8×(10の308乗)~約±4.9×(10の-324乗) |
整数を格納するなら、short型・int型・long型のいずれか、文字を格納するならchar型といった具合に、用途に合わせて様々な型が用意されています。
どの種類の箱をどういう名前で用意するか、それを変数宣言で定義しています。
データ型の種類
上表で見てきたとおり、データ型は以下4つの種類に分類することができます。
・整数
・小数(小数点数)
・文字
・論理値(真or偽)
それらのうち、整数が4種類、小数が2種類あることに気が付くと思います。
これらの違いはデータの容量、つまり箱の大きさにあります。
例えば、byte型で扱える数値の範囲が「-128 ~ +127」なのに対して、int型やlong型はもっと大きな範囲の数値を扱うことができます。
小数も同じで、float型よりdouble型の方がより精度の高い小数を扱うことができます。
データ容量の大きさ(箱の大きさ)によって、メモリーの使用量が異なるため、本来はプログラムの中で扱う値の大きさに応じたデータ型を選ぶのが適切ですが、最近のコンピュータのメモリー容量は潤沢になっているため、整数ならint型やlong型、小数ならdouble型を使うことが一般的になっています。
代入
変数を用意したら、その変数にデータを格納することになります。
変数で扱うデータのことを「値」と言います。「値」と聞くと、数値だけのように思えるかもしれませんが、変数の種類が文字型(char型)であったとしても、「値」と表現します。
そして、その「値」を変数に格納することを「代入」と言います。
代入は以下のように「=演算子」を使います。
変数名 = データ;
一見すると、「左辺と右辺が等しい」ということを表しているように思えるかもしれませんが、プログラミングの世界では、上記のように記述することで「右辺の値を左辺の変数に格納する」という意味になります。
初期化
変数の宣言を行った後、その変数を使う前に必ず初期化をしておく必要があります。
変数は宣言しただけでは、まだ使える状態にはなっていません。何らかの値を代入して初めて使えるようになります。
そのように、変数に初めて値を代入することを「初期化」と言います。
もし初期化をしないと、その変数に何が入っているのか不定な状態となり、コンパイラが問題のあるコードだと判断してコンパイルエラーとなります。
以下のように変数の宣言と初期化はセットとなると覚えておきましょう。
int x;
x = 1;
また、以下のように記述すれば、変数宣言と同時に変数の初期化を行うことができます。
型名 変数名 = データ;
一例として、前述した以下2つのステートメントについて考えてみます。
int x;
x = 1;
これを以下のように1つのステートメントにまとめてしまうことができるというわけです。
int x = 1;
この書き方もとてもよく使われますので覚えておきましょう。
どちらの方法で記述しても結果は同じです。どちらの記述方法がソースコードが読みやすくなるのか、その点を考えて使い分けられるようになると良いです。
定数
1つの箱、つまり1つの変数に入る値は1つだけです。2つ以上は入れられません。
そのため、以下のように記述したら、
int x;
x = 1;
x = 2;
変数「x」には「2」が入った状態となり、古い値である「1」は消えてしまいます。
一度変数に設定した値を、後から変更させたくない場合もあります。その場合は、final修飾子を使用します。
final int x = 1;
このようにすると、その変数は「定数」となり変更不可となります。
定数は以下のイラストのように値を一度入れたら、あとはふたを閉めるイメージです。
まとめ
今回はJavaの変数とデータ型について見てきました。
変数はデータを格納しておく箱のようなものであり、変数宣言をすることで、その箱が用意され(メモリー上に確保され)、使えるようになります。
また、変数で扱うデータのことを「値」と言い、格納する値の種類に応じたデータ型が存在します。
まずは、そこまでのことを押さえておいてください。
本記事の中で、「演算子」とか「修飾子」といった用語をシレッと使いましたが、その辺りの説明については次回以降で行っていきます。