(「絵本」pp.4-5 参照)
最も簡単な Java のプログラムを示します。 ファイル名は FirstProgram.java とします。
class FirstProgram { public static void main(String[] args) { System.out.println("This is a my first Java program."); System.out.println("Text can be displayed by using System.out.println."); } }
このプログラムを実行すると、画面に次のような表示が出ます。
This is a my first Java program. Text can be displayed by using System.out.println.
System.out.println の行のそれぞれのダブルクォーテーション (二重引用符) で、挟まれた部分が表示 (出力) されていることが分かります。
上のプログラムの例を用いて、 Java のプログラムを書く際の最も基本的な約束ごとを説明します。
(「絵本」pp.6-7 参照)
変数は Java などの言語によるプログラミングの中心となる概念です。
変数は、値を入れる箱のようなものであり、 それぞれの変数には名前がつけられています。 一つの変数には、ある時点で一つの値しか入れることができません。 すでに値が入っている変数に別の値を入れると、 前の値は失われます。
プログラムでは、変数に値を入れたり、 入っている値を取り出したりしながら計算を進めていきます。 プログラムにおける変数は、時々刻々と値が変わっていくものなのです。
プログラムで変数に値を入れることを「代入」と言います。 代入は次の形式で書きます。
変数 = 式 ;
イコールが代入を表す記号です。 イコールは、数学では「等しい」という意味を表す記号でしたが、 Java では、変数に値を入れるという意味になります (Java で「等しい」ことを表す記号は別にあります)。
イコールの左 (左辺) には変数の名前を書き、 右 (右辺) には式を書きます。 式を計算した結果の値が変数に代入されます。 たとえば、
x = 100;
とすると、値 100 が変数 x に代入されます。 代入の前に x に入っていた値は消えてなくなります。
代入の右辺にはもっと複雑な式を書くこともできます。
variable = 3 * x + 1;
上の例は、変数 x の値を 3 倍してそれに 1 を加えた値を、 変数 variable に代入します。 この時点での x の値が 100 であれば、 variable には 301 が代入されるのです。
右辺には、普通の四則演算の式なら何でも書くことができます。 (「絵本」 pp.22-23 参照)
ただし、掛け算を「×」や「・」ではなく * (アステリスク) で表したり、 割り算を「÷」や分数ではなく、 / (スラッシュ) で表すことなどに注意が必要です。 また、数学の式のような中カッコや大カッコの使い方はできません。 小カッコを重ねて書くことで、演算の優先順位を示すことができます (「絵本」pp.36-37 参照) 。
代入の右辺の中に左辺と同じ変数があっても構いません。例えば、
x = x + y;
という (数学の常識では奇妙な) 書き方が可能です。 この意味は、x と y の和を 新たな x の値として代入する、ということです。 例えば、x が 100 で y が 50 であった場合、 150 が新たに x に代入され、古い 100 という値は消えてしまいます。
プログラムで使う変数は、あらかじめ宣言しておく必要があります。 変数の宣言は、たとえば次のように書きます。
int x; int alpha, beta, gamma; int september12;
キーワード int の後に宣言した変数の名前を並べて書きます。 変数名が 2 つ以上ある場合は、コンマ (,) で区切り、 最後にセミコロンを書きます。
変数の名前は、最初の 1 文字がアルファベットである必要があります。 2 文字目以降はアルファベット、数字を用いることができます。 また、アルファベットの小文字と大文字は区別されます。 たとえば A と a は別の変数です。 変数名に日本語を用いることもできますが、 いろいろなトラブルの元になるので、 避けた方が良いでしょう。
変数の名前は、その変数の意味を反映した分かりやすい名前にすべきです。
変数宣言と同時に、変数に値を入れておくこともできます。 これを「初期化」と言います。たとえば、
int x = 100; int alpha = 100, beta = 200, gamma = 300;
のように、変数名のあとにイコールを書き、 初期化したい値を書いておきます。 また Java では、 明示的に初期化していない変数には 0 が入っていることになっています。
変数には「型」があります。 これは、その変数にどんな種類の値を入れることができるかを表すものです。 今のところは整数値を入れる変数だけを扱うことにします。 実は int というキーワードは、 integer (整数) の略です。 Java では、整数以外の値を扱うための変数もあり、 その場合は int 以外の方法で宣言します。
簡単なプログラムの例を示します。 このプログラムは x, y, z の 3 つの変数の和を求める働きをします。 (ファイル名は SumOfThree.java とします)
class SumOfThree { public static void main(String[] args) { int x = 10, y = 20, z = 30; int sum = 0; sum = sum + x; sum = sum + y; sum = sum + z; System.out.println("x + y + z = " + sum); } }
このプログラムの動きを追ってみましょう。
まず、x, y, z は、 それぞれ 10, 20, 30 の値で初期化され、 sum は 0 で初期化されています。
sum = sum + x; が実行されると、 sum の値は 0 + 10 で 10 となります。
次に、sum = sum + y; が実行されると、 sum の値は、元の sum の値が 10 であることから、 10 + 20 で 30 となります。 この時点で sum には x と y の合計が入っていることになります。
さらに、sum = sum + z; が実行されると、 sum の値は、元の sum の値が 30 であることから、 30 + 30 で 60 となります。 これで、 sum には x, y, z の合計が 入っていることになります。所期の目的が達成できたというわけです。
この例題の 3 つの代入文は、いずれも sum = sum + 変数; の形をしています。 これは、sum の古い値に変数の値を加えて、 その結果を sum に代入 (戻す) することを意味しています。
つまり、 sum に各変数の値を次々足し込んでいることになります。 0 に x, y, z の値をそれぞれ足し込めば、 3 つの値の総和が求まるわけです。
実は先ほどのプログラムの方法ではなく、 3 つあった代入を一つにまとめて、もっと簡単な書き方が可能です。 (ファイル名は SumOfThree2.java)
class SumOfThree2 { public static void main(String[] args) { int x = 10, y = 20, z = 30; int sum = x + y + z; System.out.println("x + y + z = " + sum); } }
x, y, z の和を一気に求めて、 sum に代入しています。 これでも、プログラムの働きは変わりません。
しかし、前のプログラムの考え方が無駄であるとは言えません。 ある意味で、前のプログラムの方が プログラムの書き方の本質を表しているとも言えるのです。 たとえば、 3 個ではなく 100 個の和を求めるときは、 これに近い考え方をすることになります。