Java のテキストブロック(Text Blocks)という機能[プログラミング]
(2026-07-07 01:11:29) by shinoda
< ページ移動: 1 2 >
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 ならやっぱヒアドキュメントがいいか。