型推論(var)のベストプラクティス集
Java 10 以降で使える var(型推論) は便利ですが、使い方次第でコードが読みやすくも読みにくくもなります。
ここでは、初心者が迷わない「ベストプラクティス(おすすめの使い方)」 をわかりやすく紹介します。
1. 「型が明らかなとき」だけ使う
良い例
var name = "Tanaka"; // 右辺が明らかに String
var count = 10; // 右辺が明らかに int
var list = new ArrayList<String>(); // 右辺に型が見える
Java悪い例
var result = getData(); // getData() が何を返すかわからない
Java💬 解説
var の目的は「冗長な型宣言を省くこと」。
右辺を見ただけで型が分かる場合にのみ使う のが基本です。
逆に、型が一目でわからないときは「読み手を混乱させる」ので避けましょう。
2. 長くて複雑な型をスッキリ書きたいときに使う
良い例
var map = new HashMap<String, List<Integer>>();
Java→ Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
よりずっと読みやすくなります。
💬 解説
ジェネリクス(<>)で型が長くなる場合、
右辺に型が書かれているので var にしても安全 です。
3. 変数の「意味」を表す名前を付ける
良い例
var userName = "Alice";
var userAge = 25;
var itemList = new ArrayList<String>();
Java悪い例
var x = "Alice";
var y = 25;
var z = new ArrayList<String>();
Java💬 解説
var を使うと型が見えなくなる分、
変数名で「何を入れているか」伝えることがより重要 になります。
4. ループや一時変数では積極的に使う
良い例
for (var item : list) {
System.out.println(item);
}
for (var entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
var sum = a + b;
Java💬 解説
一時的な変数(ループ変数・中間計算など)はスコープが短く、
「型がすぐわかる」ため var を使うとすっきりします。
5. 明示的な型が必要な場面では無理に使わない
悪い例
var data = process(); // process() の戻り値が分からない
Java💬 解説
API の利用者やチームメンバーが「data の型が何か」調べないと分からないのは非効率。
読みやすさ・保守性を優先する のがプロの考え方です。
6. var はローカル変数専用。フィールドや引数では使えない
ダメな例
class User {
var name = "Tanaka"; // フィールドには使えない ❌
}
Javavar は メソッド内(ローカルスコープ) でしか使えません。
クラスのメンバ変数(フィールド)やメソッド引数、戻り値には使えない仕様です。
7. コードレビューで混乱しないことを優先する
var を多用すると、型が分かりにくくなることがあります。
チーム開発では次のようなルールを決めておくと良いです。
| 状況 | ルール例 |
|---|---|
| 型が一目で分かる | var OK |
| メソッド呼び出しの結果など、型が不明瞭 | 明示的な型を書く |
| API公開部分(publicな戻り値や引数) | 明示的な型を書く |
8. IDE(Eclipse, IntelliJ)などで型ヒントを活用する
多くのIDEでは、var にマウスを当てると推論された型を表示してくれます。
「読みづらくなる」不安はIDEでカバーできる のもポイントです。
まとめ:初心者向け「varの黄金ルール」
| No | ポイント | 理由 |
|---|---|---|
| ① | 型が明らかなときだけ使う | 可読性を保つ |
| ② | 複雑な型を簡潔に書きたいときに使う | コードをすっきり |
| ③ | 意味のある変数名を付ける | 型が見えない分、名前が重要 |
| ④ | 一時変数・ループ変数には積極的に使う | スコープが短く安全 |
| ⑤ | フィールド・引数・戻り値には使わない | 仕様で禁止されている |
| ⑥ | チームでルールを統一する | 混乱を防ぐ |
おすすめ練習
以下のコードを2パターンで書いてみましょう。
- ① 全て明示的に型を書く
- ②
varを使って簡潔に書く
var list = new ArrayList<String>();
list.add("Apple");
list.add("Banana");
for (var item : list) {
System.out.println(item);
}
Java実際に自分で両方書いて比較すると、
「どこまで var を使うと読みやすいか」が実感できます。
