Javaテキストブロックにちょい足し(Lambig)
こんにちは、株式会社クラス システム開発本部 Lambigです。
テックブログなればそれっぽい記事があらまほしく、簡単に物してみます。
バックエンドの技術スタックに合わせ、Javaでひとネタ。
Java15でテキストブロックという機能が(正式に)追加されました。
LTSベースだと2021/09のJava17からなので、
まだ使ったことがない方もそれなりにいるはず。
この機能はPHPのヒアドキュメントやJavaScriptのテンプレートリテラル同様、複数行の文字列がそのまま入力できる機能です。
このように。喜ばしいことです。で、一応変数の利用も可能です。
えっ……と、うーん、順番ベースなのか……大時代だな……
これ普通に古き良きJavaってかC式のformatだな……
ちょっと気に入らないですが、「気に入らない」はライブラリの母、
より気に入るようになるライブラリを書きま
した。
使い心地はこのような感じ。
String output = escape("""
Name: ${name}
Phone: ${phone}
Address: ${address}
Salary: ${salary}
""").where(Map.of( // ここで変換のマッピングを定義する
"name", name, // 上記の${name}を置換する。JavaScriptスタイル。
"phone", phone,
"address", address,
"salary", salary
));
一応、テキストブロックが利用できないバージョンのJava(11+)も
サポートするよう作ってはあり、以下のようにも使えます。
String output = escape(
"Name: ${name}",
"Phone: ${phone}",
"Address: ${address}",
"Salary: ${salary}")
.where(Map.of(
"name", name,
"phone", phone))
.where("address", address) // こういう風に変数を宣言することもできる
.where("salary", salary)
));
変数宣言が多少長ったらしいですが、
名前ベースでのエスケープができるようになりました。
(スコープ内の変数にアノテーション付けて
何とかできないかなとか思ったものの、値の追跡が大変そうだし
できたとしてコスト負けしそうだったのでやめ)
再帰適用のような凝ったことはできませんが、
たとえば何か事情があって生のSQLクエリが書きたいケースなどでは
そこそこ便利なんじゃないでしょうか。
先のライブラリはこちらのバンドルにも含まれています。
基本的に気持ちよく実装できることばかりを考えており、
そういうライブラリの詰め合わせです。
ライブラリ自体は個人的に開発したものなので、
そのフィードバックはこちらへ
記事へのフィードバックはコメントにお願いします。
エンジニア募集のお知らせ
現在、クラスではエンジニアを募集中です!
ご興味がある方はお気軽にカジュアル面談をお申し込みください。
▼面談のご応募はこちらから
https://herp.careers/v1/clas/YV-LL65HZJWd
▼採用情報はこちらから
https://clas.style/company/recruit/
この記事が気に入ったらサポートをしてみませんか?