導入
皆さんは、ソースコードの中に「1000000000」のような長い数字が並んでいて、桁数を確認するために指で数えた経験はありませんか?Java 7から導入された「数値リテラルのアンダースコア」は、そうした読み間違いやミスを劇的に減らすための非常に重要な小技です。可読性を高めることは、保守性の高いコードを書くための第一歩です。
基礎知識
Javaにおいて、整数や浮動小数点数を直接記述する値を「リテラル」と呼びます。例えば、int型の変数に代入する「100」や、double型の「3.14」などがこれにあたります。アンダースコア(_)を数値リテラル内に含めることで、人間にとって桁区切りが分かりやすくなります。コンパイラはコンパイル時にこのアンダースコアを無視するため、プログラムの実行速度やメモリ消費量に一切の影響はありません。
実装/解決策
アンダースコアを挿入する際は、以下のルールを守る必要があります。
・数字と数字の間にのみ配置できる(先頭や末尾には置けない)
・小数点の前後には置けない
・L(long)やF(float)といった型指定子の隣には置けない
基本的には「3桁ごとのカンマ」の代わりとして使うのが、現場でのベストプラクティスです。
サンプルプログラム
public class NumericLiteralExample {
public static void main(String[] args) {
// 100万を表現する場合、以前は「1000000」と書いていましたが、
// アンダースコアを使うと一目瞭然です。
int oneMillion = 1_000_000;
// 16進数や2進数でも利用可能です
int hexValue = 0xCA_FE_BA_BE;
int binaryValue = 0b0000_0001_0000_0001;
// 浮動小数点数でも使えます
double creditLimit = 1_000_000.50;
System.out.println(“100万: ” + oneMillion);
System.out.println(“16進数: ” + hexValue);
System.out.println(“2進数: ” + binaryValue);
System.out.println(“浮動小数点: ” + creditLimit);
}
}
応用・注意点
現場で注意すべき点は、「やりすぎない」ことです。例えば「1_0_0_0」のように1桁ごとに区切ると、かえって読みづらくなります。あくまで「3桁区切り」などの一般的なルールに従うのが無難です。また、この機能はJava 7以降で有効ですので、非常に古いレガシーシステムを保守している場合は注意が必要です。
また、var(型推論)と組み合わせる際も、数値リテラルの読みやすさはそのまま維持されます。コードレビューで「この数字は何桁だ?」と迷う時間をゼロにできるよう、積極的に活用していきましょう。

コメント