🙌

Java8 から Java17 にバージョンアップしてテキストブロックが使えるようになった

2024/02/05に公開

はじめに

先日、手ぶら登園では Java8 から Java17 へのバージョンアップを行いました。実行環境は Java17 になりましたが、実際のコードのほとんどは Java8 のままで、これから Java17 の機能を適用していこうという段階です。

バージョンアップに際してやったことや苦労したことなどは、プロダクトの Java を 8 → 17 へバージョンアップしたときにやったことに書いているので、合わせてご覧ください!

Java17 になって使えるようになった機能の中でも、私的お気に入りを挙げるならこの3つです。

  • record
  • switch式
  • テキストブロック

今回は上記のテキストブロックについて、使うと可読性が爆上がりするよ〜ということをお伝えできればと思います。今更感はありますが、まだテキストブロックを活用できていない方の参考になれば幸いです。

ちなみに、テキストブロックは Java15 で導入された機能です。

テキストブロックの使用例

複数行にわたる文字列を定義する際、Java8 では以下のように StringBuilder+ を使って実装していました。

String text = "1行目" + System.lineSeparator()
    + "2行目" + System.lineSeparator()
    + "3行目" + System.lineSeparator();

String text = "1行目\n" +
    + "2行目\n" +
    + "3行目\n";

String text = new StringBuilder()
    .append("1行目")
    .append(System.lineSeparator())
    .append("2行目")
    .append(System.lineSeparator())
    .append("3行目")
    .append(System.lineSeparator())
    .toString();

上記をテキストブロックを使って書き直したものが以下です。
+ や改行文字がなくなった分簡潔になりました。

String text = """
    1行目
    2行目
    3行目
    """;

単純な文字列よりも JSON だとより旨みが感じられます。
文字列連結だとダブルクォーテーションをエスケープする必要があり、JSON の構造を理解する上でノイズとなっていました。

String json = "{\n"
    + "    \"key1\": \"value1\",\n"
    + "    \"key2\": value2\n"
    + "}\n";

しかし、テキストブロックを使うと以下のように書け、直感的に理解できます。

// NOTE: 一番浅い位置 (`{`) がインデントの基準となる
String json = """
    { 
        "key1": "value1",
        "key2": value2
    }
    """;

おわりに

これまで頭の中で連結後の文字列を組み立てていたのが、テキストブロックを使うことで直感的に理解でき、可読性が上がるのがうれしいポイントです。使い所としてはプロダクションコードはもちろんのこと、テストコードの期待値を定義する際にテキストブロックを使うと期待値が一目でわかるようになって最高です。
どんどんテキストブロックを使っていきましょう!

参考

BABYJOB テックブログ

Discussion