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 を直書きしたりとか、そういうのが無かったのかもね。

コメントする