2026年2月14日土曜日

【Java進化史 第11回】Java8 〜なんだこの→は?ラムダ式の必要性〜(理論編)

【Java進化史 第11回】Java8 〜なんだこの→は?ラムダ式の必要性〜(理論編)


■ この記事で分かること

  • 若手のラムダ式がなぜ読めなかったのか
  • ラムダ式で「何が消えて」「何が残ったのか」
  • なぜInterfaceは残るのか
  • それでもJavaらしさが失われていない理由

■ 若手のコードで、私は固まった

コードレビューで見た一行。


Calculator add = (x, y) -> x + y;
System.out.println(add.calc(3, 5));

……?

矢印?

これがJava?

私の知っているJavaは、 もっと重厚で、もっと“クラス中心”だった。


■ 私が知っているJava(Java7まで)

同じ処理を、Java7で書くとこうなる。


public class Main {

    interface Calculator {
        int calc(int x, int y);
    }

    public static void main(String[] args) {

        Calculator add = new Calculator() {
            @Override
            public int calc(int x, int y) {
                return x + y;
            }
        };

        System.out.println(add.calc(3, 5));
    }
}

やりたいことは単純だ。


x + y

しかし実際には、

  • Interfaceを書く
  • 匿名クラスを書く
  • メソッドを実装する

「計算」よりも、「入れ物」の方が目立っている。


■ Java8ではどうなったか


public class Main {

    interface Calculator {
        int calc(int x, int y);
    }

    public static void main(String[] args) {

        Calculator add = (x, y) -> x + y;

        System.out.println(add.calc(3, 5));
    }
}

出力は同じ。


8

消えたのは、これだ。


new Calculator() {
    @Override
    public int calc(int x, int y) {
        return x + y;
    }
}

■ 何が消えて、何が残ったのか

消えたもの:

  • 匿名クラス
  • ボイラープレートコード

残ったもの:

  • Interface

ここが重要だ。

ラムダ式は、Interfaceを消していない。

Javaはあくまで静的型付け言語。 型がなければ成立しない。


Calculator add = (x, y) -> x + y;

この左側の Calculator があるから、 ラムダは意味を持つ。


■ Interfaceを残すのが、Javaらしい

Java8は変わった。

しかし、捨てなかった。

Interfaceという「契約」は残した。

これはオブジェクト指向の王道だ。

ラムダは“関数”ではない。

Interfaceの実装を、簡潔に書ける仕組みだ。

だからJavaは、 動的言語になったわけではない。

あくまで、 型と契約の上に立った進化だった。


■ まとめ

  • ラムダ式はInterfaceを消さない
  • 消えたのは匿名クラスの冗長さ
  • Javaらしさは残っている

→ は革命ではない。

しかし、 Javaを書く感覚を確実に軽くした。


■ 次回予告

【Java進化史 第12回】
〜ラムダ式を分解して読む〜

  • なぜ型を書かなくていい?
  • どこで型推論している?
  • 「関数型インターフェース」とは何か?

→ の裏側を、技術的に解体する。




0 件のコメント:

コメントを投稿

【Java進化史 第18回】Java8 〜「@」も読めなかった日

【Java進化史 第18回】Java8 〜「@」も読めなかった日〜 若手のコードを見たとき、 固まったことがある。 -> が読めない。 Streamも追えない。 そして、やたらと出てくる「@」。 なんじゃこれ? ■ @ は何者か 調べ...