Java | Java 10から使える var を使った変数宣言(型推論)について

Java Java
スポンサーリンク

varを使ったコードと使わないコードを混ぜて書いて、どちらが読みやすいか比較する

では、varを使ったコードと使わないコードを混ぜて書いて、どちらが読みやすいか比較する」課題を紹介します。


練習課題:varあり/なしの比較

課題1:リストの処理

次の2つのコードを見比べて、どちらが読みやすいか考えてみましょう。

A. varを使わない場合

import java.util.ArrayList;

class Compare1 {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<String>();
        fruits.add("Apple");
        fruits.add("Banana");

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}
Java

B. varを使った場合

import java.util.ArrayList;

class Compare1 {
    public static void main(String[] args) {
        var fruits = new ArrayList<String>(); // 型が長いので省略できる
        fruits.add("Apple");
        fruits.add("Banana");

        for (var fruit : fruits) { // String型と推論される
            System.out.println(fruit);
        }
    }
}
Java

👉 考えるポイント

  • Aは型が明示されていて分かりやすい
  • Bはコードが短くスッキリしている

課題2:Mapの処理

A. varを使わない場合

import java.util.HashMap;
import java.util.Map;

class Compare2 {
    public static void main(String[] args) {
        HashMap<String, Integer> prices = new HashMap<String, Integer>();
        prices.put("Apple", 100);
        prices.put("Banana", 200);

        for (Map.Entry<String, Integer> entry : prices.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}
Java

B. varを使った場合

import java.util.HashMap;

class Compare2 {
    public static void main(String[] args) {
        var prices = new HashMap<String, Integer>(); // 型が長いので省略
        prices.put("Apple", 100);
        prices.put("Banana", 200);

        for (var entry : prices.entrySet()) { // Map.Entry<String, Integer> と推論される
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}
Java

👉 考えるポイント

  • Aは「entryがMap.Entry型」とすぐ分かる
  • Bは短く書けるが、型が分かりにくいかもしれない

課題3:計算の型

class Compare3 {
    public static void main(String[] args) {
        int a = 10;
        double b = 3.14;
        var c = a * b; // これは何型になる?

        System.out.println(((Object)c).getClass().getName());
    }
}
Java

👉 実行すると java.lang.Double と出力されます。
考えるポイント

  • varを使うと型が省略できるが、推論結果を理解していないと混乱する

まとめ

  • varは「型が長いとき」や「for文」で特に便利
  • ただし「型が分かりにくいとき」は明示的に書いた方が親切
  • 読みやすさは状況次第。チーム開発ではルールを決めて使うのがおすすめ
タイトルとURLをコピーしました