Javaの定数を学ぶ!定義の方法や適切な使用場面を確認する。
この記事では、Javaにおける定数について説明していく。
この記事はおもに以下のような人たちに向けて書いている。
- プログラミングの初心者で定数がどういったものか知らない人。
- Javaにおける定数の扱いについて知りたい人。
- 実務における定数の使い方について確認したい人。
定数はそれほど難しいものではないが、うまく使えばコードの可読性が高まりコードをよりプロフェッショナルに見せることができるはず。優れたプログラマにとってはたしなみとも呼べるようなテクニックである訳だ。
定数とは?
プログラミングにおいて定数(constant)とは、固定された値を意味する。
定数の値は一度定義された後に変更することは出来ない。
変数と定数の違い
一般的に定数は変数の「対となる存在」として考えられることが多い。
“変数は値を何度も代入することができ、定数は一度しか代入することができない。”という事から変数と定数は対照的な性質を持つとも言えるが、定数の使い方を身につけるうえでその考え方はあまりオススメできない。
Javaではfinalをつけることによって定数を定義することからも推測できるように、Javaにおいては”定数は変数の一つで、値の変更が出来ないもの”と考えたほうが理解しやすいだろう。
定数の使い方
ではJavaにおける定数の使い方を見ていこう。
class ConstantExample { public static final String APP_NAME = "Calculation program"; private final int WEIGHT_LIMIT = 85; // kg public static void main(String[] args) { System.out.println("APP_NAME -> " + APP_NAME); ConstantExample instance = new ConstantExample(); System.out.println("WEIGHT_LIMIT -> " + instance.WEIGHT_LIMIT + "kg"); } }
定数の定義(宣言)
Javaにおいては定数は通常の変数に「final」修飾子を足して表現される。
例を挙げると以下のようになる。
public final String FIELD_PLACEFOLDER = 'ここに値を入力してください。';
Javaにおいては定数はクラスのメンバーとして定義されることが多く、メソッド内でローカル定数として使用されることは少ない。
また、定数は手軽にアクセスできることが求められるためstatic修飾子とともに使われることも多い。
public final static float VERSION_NUMBER = 2.3;
定数の命名ルール
定数の名前はスネークケース記法を用いて表現するのが一般的だ。スネークケース記法は文字をすべて大文字で書き、単語と単語の繋ぎ目をアンダースコアで書く記法。
Javaのみに限らずほとんどのプログラミング言語では定数はこのスネークケース記法によって書かれるのが一般的となっている。
実践における定数の使い方
実際の業務において定数がどういった場面で使用されるかを考えてみよう。
定数を使用するべき場面
定数は一般的に以下のような場合に使用される。
- 円周率といった世界共通で用いられ変化することのない値
- 商品の名前や上限値といったプロジェクト内で常に同じ値を求めらる変数
- プログラム内で複数回しようされる値
- プロパティとしてプログラム内の一箇所で集中して管理したい値
定数を使用する場面についてはシステムの設計段階で決めることもあるが、実践においてはプログラムを一度書いた後に、リファクタリングの一環として定義することのほうが多いだろう。
定数クラス
実践においては、「定数クラス」と呼ばれるプロジェクト内のプロパティをひとつのクラスにまとめたものもよく用いられる。
典型的な定数クラスの定数としては、アプリケーション名・バージョン・ビルドの日付などが挙げることができる。
class AppConstants {
public static String appName = "MyOriginalApp";
public static float versionNumber = 1.5;
}
定数クラスでは定数はインスタンスを作成せずとも参照できるようにstaticを用いることが多い。
enumの使用例
実践においては定数として定義するよりも、enum(列挙型)として定義したほうが使いやすいパターンもある。
enumとして定義するべきなのは、顧客のタイプ分けや注文の配送状況など並列する関係の複数の値を持つ値だ。
例として注文の配送状況をenumとして定義すると以下のようになる。
enum OrderStatus {
NEW = 0,
PROCESSING = 1,
COMPLETED = 2,
CANCELED = 3
}