Java8 から Java17 にバージョンアップしてテキストブロックが使えるようになった
はじめに
先日、手ぶら登園では 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
}
""";
おわりに
これまで頭の中で連結後の文字列を組み立てていたのが、テキストブロックを使うことで直感的に理解でき、可読性が上がるのがうれしいポイントです。使い所としてはプロダクションコードはもちろんのこと、テストコードの期待値を定義する際にテキストブロックを使うと期待値が一目でわかるようになって最高です。
どんどんテキストブロックを使っていきましょう!
参考
私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、こどもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion