前に変数の扱い方を見ました。変数を使うにはその名前と値の型を決めてから値を代入するのでした。変数はその名の通り値がよく変わる場合にはとても便利です。例えば銀行口座の預金はお金を預けたり下ろしたりするので残高はよく変わります。変数はこういうものを扱うのには便利です。
定数とは
しかし値が変わらないものもあります。例えば一週間の日数はまず変わることはないでしょう。またG7先進7カ国首脳会議の参加国の数も変わらないでしょう。変わるとしたらG7そのものが別な名前になってしまいますからね。このような値がころころ変わらないものは定数という変数とは違う扱いをします。
定数の宣言方法
いつも一定の値でよく参照したいものは定数に値を入れておきます。以下に例を挙げます。
final int DAYS_OF_WEEK = 7;
一週間の日数をDAYS_OF_WEEKという名前で定数を宣言しています。変数の扱いと似ていますがfinalという予約語が最初についているのが違います。
ちなみに定数の場合はすべて大文字で記述するのがJavaの慣習になっています。ただこれは絶対ではなくコンパイルでエラーになることはありません。
では上のコードを和訳してみましょう。
ここでDAYS_OF_WEEKという定数を宣言します。定数である証拠にfinalを指定していますのでお間違えないように。定数の型はintという整数型でその値は7です。定数であるため値を変更することはできません。後で代入などなさらぬようお願いします。
仮にこのあとで以下のように値を代入しようとするとコンパイルでエラーとなります。
DAYS_OF_WEEK = 8;
一週間の日数はそんなにしょっちゅう変わっては困りますからね。
定数の利用方法
一週間の日数は忘れる人はさすがにいないと思いますが、覚えにくい値を定数にしておくと中で何度も思い出す必要がありません。また仮に間違ったことがわかった時には直すところは一箇所で済みます。
final int MARATHON = 42196; int once = MARATHON * 1; int twice = MARATHON * 2; int ten_times = MARATHON * 10;
マラソンの距離をメートル単位で定数にもたせてそれをもとに掛け算をしています。ソースコード中のアスタリスク*は「掛ける」を意味します。数学で使う記号だとアルファベットのxと間違えやすいですし、そもそも半角記号には掛け算記号も割り算記号もありません。ちなみに割り算はスラッシュ/を使います。分数のような考え方ですね。
以下和訳です。
定数 MARATHONを宣言します。型はintつまり整数型で値は42196です。次にonceという変数を宣言します。型は整数型で定数MARATHONの値に1をかけた値を代入します。その次にtwiceという変数を宣言します。型は整数型で定数MARATHONの値に2をかけた値を代入します。最後にten_timesという変数を宣言します。型は整数型で定数MARATHONの値に10をかけた値を代入します。
ここで気づきました。マラソンの距離は本当は42195メートルでした。修正しなければいけませんね。修正箇所は定数に代入している値だけです。
final int MARATHON = 42195; int once = MARATHON * 1; int twice = MARATHON * 2; int ten_times = MARATHON * 10;
もし定数MARATHONを使っていなければ以下のように三箇所直さなければいけませんでした。複数の箇所にこの値が散らばっていたら修正し忘れることも起こりそうですね。
int once = 42195 * 1; int twice = 42195 * 2; int ten_times = 42195 * 10;
同じ値を複数の場所で参照する場合はまずその値を定数にしておきましょう。情報が一箇所にまとまるので後々変更しなければいけない時に楽になります。