Javaのみならず、全てのプログラミングにおいて基本中の基本は、「変数宣言」です。
変数とは、「データや値を収納するための箱」のようなものです。プログラミングでは、まず変数宣言をして、その変数を使って様々な計算を行っていきます。
それでは、具体的なやり方を一緒に学んでいきましょう!
変数宣言のやり方
まずはソースコードを見てください。
public class sample { public static void main(String[] args) { int sample; //"sample"という変数を宣言 sample = 10; //変数sampleに"10"という値を代入 System.out.println(sample); //変数sampleの値を出力 } }
このプログラムは、変数sampleに10を代入し、出力するというプログラムです。代入とは、数学などで使うように、変数の値を定めることを言います。また、変数の値をなんらかの形で利用することを取得と言います。
System.out.println()は、()内に書かれた変数が持つ値や、値そのものを出力するものです。ここでは出力ログに「10」が出力されます。これからよく使うので覚えておきましょう。
さて、具体的には、このように変数宣言を行います。
型 変数名;
早速わからない言葉が出てきましたね。「型」とは一体なんなのでしょうか。
データ型とは
プログラミングで変数を宣言するときは、その変数が収納できる値の種類を決めなければなりません(例外あり)。それが、「データ型(または単に型)」です。
例えば、先ほどのソースコードで出てきたintという型は整数を表します。したがって、変数sampleには、整数のみが代入できて、小数などは代入できないのです。
では、具体的にデータ型にはどのようなものがあるのでしょうか。Javaには、とても多くのデータ型があります。しかし、初心者のうちは以下の4つだけを覚えておけばいいでしょう。
- int型
±約21億までの整数を代入できる。 - double型
小数を代入できる型です。 - boolean型
真偽値を代入できる型です。真偽値とはYESかNOかなど、二者択一の値のことです。詳しくは計算と演算子の記事で行います。 - String型
文字列を代入できる型です。文字列とは、2つ以上の文字の並びです。こんな意味深な言い方なのは実は1つの文字だけを扱う型があるからなのですが、それはほとんど使わないのでここではスルーします。
変数の初期化と上書き・定数
先ほどのソースコードでは、まず変数を宣言してその後で値を代入していました。
しかし、必要がある場合を除いて、変数は宣言すると同時に値を代入することが推奨されます。この「変数宣言と値の代入を同時に行う」ことを「変数の初期化」といいます。
int sample = 10;
これで、宣言と代入を同時に行うことができます。具体的には以下のようにします。
型 変数名 = 代入する値;
さて、変数はその名の通り「変えることができる数」です。したがって、一度値を代入した後別の値に書き換えることができます。やり方は簡単です。
変数名 = 新しく代入する値;
変数の初期化をせずに値を新しく代入するときも同じですね。
public class sample { public static void main(String[] args) { int sample; //"sample"という変数を宣言 sample = 10; //変数sampleに"10"という値を代入 sample = 20; //変数sampleを20に上書き System.out.println(sample); //変数sampleの値を出力 } }
一番最初のソースコードにsample = 20という式を加えました。
1回目の代入では10が代入されていますが、その後で20が代入され直されているので、実行すると20が出力されます。変数の値は新しく代入をするとその前の値は消えるので注意してください。
さて、ここまで変数の上書きについて解説してきましたが、プログラミングをしていると後から値が変わると困る変数というものが出てきます。一人でプログラミングをしているうちはあまり気にならないかもしれませんが、大人数で開発をするとよくこの問題が起こります。
自分はもう上書きしないつもりで宣言した変数だったとしても、他の人が見たときにそれが伝わっているとは限らないので、値を上書きしてしまうかもしれません。
そんなことにならないように、Javaには「定数」というものがあります。文字通り、「定まった数」です。定数は、一度初期化するとその後上書きをするとエラーになります。エラーログには「定数を上書きしようとしました」と出るのですぐに原因を突き止めることができます。具体的には以下のように宣言します。
final 型 定数名 = 値;
一般的に、開発の現場では定数の名前はわかりやすいように全て大文字にします。
変数のスコープ
変数や定数には、それが有効である範囲というものがあります。具体的に「有効である範囲」とは、その変数に値を代入したり、値を取得したりできる範囲を指します。変数・定数は基本、それが宣言された{ }(大カッコ)の中でのみ有効です。例を見てましょう。
public class sample { public static void main(String[] args) { int a = 10; if(a < 5) { int b = 20; } a = 5; b = 10; } }
見慣れない文がありますがここではスルーしましょう。
さて、まずこのプログラムを実行すると、エラーが発生します。なぜだかわかりますか?
ここで変数aと変数bが宣言されている場所を見てみましょう。
変数aは、public static void main(String[] args){ }の中で宣言されています。
変数bは、if(a < 5) { }の中で宣言されています。
その後、a、bの値をそれぞれ上書きしていますが、その処理が書かれているのは
public static void main(String[] args){ }の中です。
ところが変数bはif(a < 5) { }の中で宣言されています。よって変数bはその中でしか有効ではないのです。
ですからb = 10という処理は実行できないのでエラーになります。
スコープによるエラーは初心者がよくやってしまうミスです。変数を上書きしたり、計算に用いるときにはその変数が同じ{ }の中で宣言されているかをよく確認しておきましょう。
変数・定数の名前
ここで、変数や定数の名前について触れておきます。基本的に変数・定数の名前は自由ですが、いくつかルールや慣習があります。
予約語は使ってはいけない
予約語とは、Java自体が「この単語は名前としては使ってはいけない」と定めているものです。変数名だけでなく、今後出てくる配列やクラスの名前にも使うことができません。
具体的に予約語とは、Javaのプログラムを組む上で既に使われている単語です。
例えば変数の名前や、修飾子(別記事にて)などです。よって、intやbooleanといった名前はつけることができません。
既に使っている変数名を使ってはいけない
例えば変数sampleが宣言されたとき、そのスコープ内でもう一度変数sampleを宣言してはいけません。区別がつかないからです。
大文字/小文字、全角/半角は区別される
Javaでは、大文字/小文字、全角/半角は別の文字として扱われます。ですので、変数Sampleと変数sampleは別の変数として処理されます。
変数名は全てアルファベットで小文字、半角でわかりやすいものにする
絶対ではありませんが、基本変数名は全て小文字で半角のわかりやすい名前をつけます。わかりやすい名前とは、他人が見てもその変数が何を示すのかわかる名前です。
例えば顧客の年齢を統計して平均を出すようなプログラムを作るとき、年齢を代入する変数にはAgeなどとつけるのが望ましいです。
また、日本語を使うのも避けた方が良いです。
まとめ
いかがでしたでしょうか。変数の基本はこの記事をしっかり読めば完璧に理解できます。次回は、いよいよ計算に入っていきます。頑張って行きましょう。