変数に対する操作には「宣言(Declaration)」, 「代入(Assignment)」, 「参照(Reference)」の3種類がある. 次のサンプルプ ログラムを例にそれぞれの説明をする.
変数は1つのプログラム中でいくつでも使うことができ,名前(変数名)で区別 する.
class VarTest { public static void main(String[] args){ int i; // (1) i=1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) i=i+1; // (2) System.out.println( i + " の2乗は " + (i*i) + "です"); // (3) } }
型の名前 変数名;変数への代入, 参照をおこなう前にその変数に型を対応づける. 型とは,プ ログラムが扱う値を性質によって分類したもので多くのプログラミング言語で 定義されている概念である.Java言語では型は3種類に分類される.
変数を箱にたとえると,下の図のように箱に形があって,入れられるものが決 まっていると考えるとわかりやすい.
変数名 = 式という式(この例では「1」という定数だが, 変数, 演算式等の値を生成するさ まざまなものが書ける)を実行すると, 副作用(side effect)としてその変数に 対応する箱に式の値が入る. 宣言と代入を同時におこなうこともできる. たと えば, (1),(2)はまとめて,
int i=1;のようにも書ける.
変数を箱にたとえると,下の図のように箱に同じ形の値を入れる動作と考え ることができる.ただ,図と違って箱が空でない場合は古い値は捨ててから 入れる.
ある型の値は別の型の変数には入れられない.これは箱にたとえると,下のように 別の形の箱にいれようとする動作に該当する.
変数を箱でたとえる時に注意が必要なのは,参照は箱から値を取り出す動作だ が,その際,下の図のように値は複製され,変数という箱には元の値が入った ままになる点である.そのため,一度値を入れた変数は何度でも利用可能である.
i=i+1;といった表記である. Javaでの '=' は等しいという「関係」を表すのではな く, 右辺の値を計算して左辺の変数に代入するという「操作」を表すことに慣 れる必要がある.
数学における「=」との混同を避けるために、代入用の演算子として、「:=」を 使うプログラミング言語や、「<-」を使うプログラミング言語もある。しかし、 C++では使用頻度の高い代入の演算子を短くすることの方に意義を見いだしたた め、代入演算子として「=」を採用した。Javaもそれを受け継いでいる。
変数名の付け方には,
プログラミング言語の中には,変数の宣言がいらない(省略可能な)言語もあ る(BASIC, FORTRAN, Perl,rubyなど).このような言語だと,短くかけるのはたしか だが,変数名のスペルミスの検出や型チェックなどの観点から,大規模なプ ログラムを作成するための言語では変数宣言はあった方が良いという見方が主 流になっている。
ここで説明した変数の話はすべてのプログラミング言語で通用する話ではなく, Java言語特有(といっても,他の多くの言語で通用する)話であることに注意さ れたい.変数に型のない言語はたくさんあるし,変数という箱が空でないと代 入できない言語, 変数を一度しか参照できない言語なども考えられている.