Akka Java の勉強を始めた。Records 使ってみた。

Committee

うちの部署には他のグループの人たちと交流できるように「コミッティ」って制度がある。そこでは、10%くらいの時間を使って適当に同じ興味を持った人が集まって好きに勉強とかしてる。これまで僕は、Micronaut とか Kubernetes とか触ったかな。

そこで「Akka に興味があるー」って言ったら「面白そう」って言ってくれて何人かで勉強を始めてみた。これまでずっと興味はあったんだけど手を出せてなかったので嬉しい。

勉強をするってなると、家でも触りたくなったので触ることにする。

Akka Java

Akka やるなら Scala を使う人が多いのかなぁって思うけど、僕は今生では Scala は諦めてるので(←来世の自分よろしく)、Java でやる。

Akka Actors Quickstart with Java · Lightbend Tech Hub

Quick Start プロジェクトをダウンロードしてきて動かして楽しんだ。

Records

そういえば、Quick Start の中にこういう部分がある。やりとりするメッセージオブジェクト。

  public static final class Greet {
    public final String whom;
    public final ActorRef<Greeted> replyTo;

    public Greet(String whom, ActorRef<Greeted> replyTo) {
      this.whom = whom;
      this.replyTo = replyTo;
    }
  }

  public static final class Greeted {
    public final String whom;
    public final ActorRef<Greet> from;

    public Greeted(String whom, ActorRef<Greet> from) {
      this.whom = whom;
      this.from = from;
    }

// #greeter
    @Override
    public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      Greeted greeted = (Greeted) o;
      return Objects.equals(whom, greeted.whom) &&
              Objects.equals(from, greeted.from);
    }

    @Override
    public int hashCode() {
      return Objects.hash(whom, from);
    }

    @Override
    public String toString() {
      return "Greeted{" +
              "whom='" + whom + '\'' +
              ", from=" + from +
              '}';
    }
// #greeter
  }

これ、Records で書けそうだなーと思って書いてみたら動いた。Records は Java 15 で Second Preview になってて、Java 16 で正式に入る予定の機能。

  public record Greet (String whom, ActorRef<Greeted> replyTo) {}

  public record Greeted (String whom, ActorRef<Greet> from) {}

楽だなー。フィールドに直接アクセスしていた部分をメソッド呼び出しに書き換えたくらい。

それだけ。