Java のテキストブロック(Text Blocks)という機能

Java 案件は何度もやったことはあるが、既存システムの修正などが主体だったので、そんなにJavaの言語仕様を深く理解はしていなかったのよね。

なもんで、今回初めて Java のソースで """ とダブルクォーテーションが3つ並んでるのを見て、「なんじゃこりゃ?」って(^^;;;。

君が代は千代に八千代に
さざれ石の巌となりて
苔のむすまで

これを文字列リテラルに突っ込むんだけど、

String msg = """
君が代は千代に八千代に
さざれ石の巌となりて
苔のむすまで
""";

となってて。

VB.NETのようにダブルクォーテーションをダブルクォーテーションでエスケープしているわけじゃないよな。それだと文の前後にダブルクォーテーションが付いちゃうしな(「"君が世は~むすまで"」ってなっちゃう)・・・と悩む。

実はこれ、文字列リテラルにそのまま複数行を突っ込める「テキストブロック(Text Blocks)」という機能。
これを使わないと、

String msg = "君が代は千代に八千代に\n"
           + "さざれ石の巌となりて\n"
           + "苔のむすまで";

こんな風に書くしかないのでごちゃごちゃ読みづらい。

Java の改修履歴を追ってみると、

Java SE 13(2019年9月17日)
 Text Blocks(文字列リテラルの複数行記述可能)第1回試作
Java SE 14(2020年3月17日)
 Text Blocks(文字列リテラルの複数行記述可能)第2回試作
Java SE 15(2020年9月15日)
 Text Blocks・第3回試作 ※これ以降、試作の記述なし

と、2020年にやっと正式な仕様として取り込まれたようだ。マジ?それまで Java って改行を含む複数行を一発で文字列リテラルに突っ込む方法ってなかったん?

俺の母国語(笑)である Perl なら、もう何十年も前からヒアドキュメントってやつで複数行を文字列リテラルに突っ込める。

my $msg = <<EOS;
君が代は千代に八千代に
さざれ石の巌となりて
苔のむすまで
EOS

こういうやつね。さらに言えばヒアドキュメント使わなくても単純にクォーテーション(シングルでもダブルでも)で囲ってやるだけでいい。

my $msg = '君が代は千代に八千代に
さざれ石の巌となりて
苔のむすまで';

VB.NETでも同じように(こっちはダブルクォーテーションね)、

Dim msg As String = "君が代は千代に八千代に
さざれ石の巌となりて
苔のむすまで"

って書ける。

ただ、一行目をクォーテーションのすぐ横から開始しないといけないので(改行しちゃうと改行がそのまま一行目として入っちゃうので)一行目の開始位置はずれる。これが嫌なら Perl ならやっぱヒアドキュメントがいいか。

今知ったんだけど、VB.NETも 2015年リースの VB 14.0 から可能になったんだなあ。そういえば、その前は & でつなげて書いてたっけ?

Dim msg As String = "君が代は千代に八千代に" + vbCrLF +
                    "さざれ石の巌となりて" + vbCrLF +
                    "苔のむすまで"

みたいに?(もう記憶が・・・)

まあ、なんにせよ、Java でこういう書き方ができるようになったのが 2020年からとは本当に意外だ。
Java が母国語の人って、こういう要件ってあまりなかったのかね?
プログラムの中にあまり HTML を直書きしたりとか、そういうのが無かったのかもね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Java のテキストブロック(Text Blocks)という機能

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/7234

コメントする

このブログ記事について

このページは、shinodaが2026年7月 7日 01:11に書いたブログ記事です。

ひとつ前のブログ記事は「オイル漏れも解決して、俺のドゥカティは元気です」です。

次のブログ記事は「久しぶりにエスカルゴ食べたわ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら