[Java]テキストブロックってかなり便利だね

Java15から文字列記述方法としてテキストブロックという機能ができました。

テキストブロックは、複数行にわたる文字列リテラルを簡単に作成できる新機能です。

これは、より大きなコードブロックやフォーマットされたテキストを表現するために非常に役立ち、従来の文字列リテラルの代わりにテキストブロックを使用することで、ソースコードがより読みやすくなり、維持管理も容易になります。

# 使い方
テキストブロックは3つのダブルクオート（"""）で囲むことで定義します。
その中に記述されたテキストはそのままの形で文字列として保持され、改行も含めて保存されます。

```java
String textBlock = """
                   文字列情報
                   """;
```

## Before
例えば、Json形式の文字列をJavaで記述する場合、従来は下記のように記述する必要がありました。
```java:Main
  public static void main(String[] args) {
    var json = "{ \"id\": \"1\", \"name\": \"Mike\", \"gender\": \"male\" }";
    System.out.println(json);
  }
```
エスケープがたくさんあるので、可読性が著しく低下していますね。

```java:実行結果
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
```

## After
テキストブロックにすると、かなり見やすくなりますね！
```java:Main
  public static void main(String[] args) {
    var id = "1";
    var name = "Mike";
    var gender = "male";
    var json = """
        { "id": "%s", "name": "%s", "gender": "%s" }
        """.formatted(id, name, gender);
    System.out.println(json);
  }
```
テキストブロック内で動的な変数を使いたい場合ですが、JavaScriptのテンプレートリテラルのような、テキストブロック内に変数を直接埋め込む機能はまだないので、`String.format()`や`formatted()`機能を使わないといけないですね。

```java:実行結果
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
```
実行結果に変わりなしですね。

JSON形式を例にしましたが、そのほかにも、SQLクエリやHTML、XMLをJavaで記述したいときもテキストブロックは有用です。

# テキストブロックを使ってHTMLを記述する
```java:Main
  public static void main(String[] args) {
    String html = """
              <html>
                  <body>
                      <h1>Welcome to my website</h1>
                      <p>This is a sample paragraph.</p>
                  </body>
              </html>
              """;
    System.out.println(html);
  }
```
```java:実行結果
> Task :Main.main()
<html>
    <body>
        <h1>Welcome to my website</h1>
        <p>This is a sample paragraph.</p>
    </body>
</html>
```
# テキストブロックを使ってXMLを記述する
```java:Main
  public static void main(String[] args) {
    String xml = """
              <?xml version="1.0" encoding="utf-8"?>
              <note>
                  <to>大谷</to>
                  <from>トラウト</from>
                  <heading>エンゼルスに居ようよ</heading>
                  <body>Showyどこにも行かないでくれ</body>
              </note>
              """;
    System.out.println(xml);
  }
```
```java:実行結果
> Task :Main.main()
<?xml version="1.0" encoding="utf-8"?>
<note>
    <to>大谷</to>
    <from>トラウト</from>
    <heading>エンゼルスに居ようよ</heading>
    <body>Showyどこにも行かないでくれ</body>
</note>
```
# テキストブロックを使ってSQLを記述する
```java:Main
  public static void main(String[] args) {
    String sql = """
        SELECT *
        FROM employees
        WHERE id = %s
        ORDER BY salary DESC
        """.formatted("shotani");
    System.out.println(sql);
  }
```
```java:実行結果
> Task :Main.main()
SELECT *
FROM employees
WHERE id = shotani
ORDER BY salary DESC
```

# テキストブロックを使ってJSONを記述する
例にも挙げた通り、もちろんJSONも記述できます。
```java:Main
  public static void main(String[] args) {
    var json = """
               { "id": "%s", "name": "%s", "gender": "%s" }
               """.formatted("1", "Mike", "male");
    System.out.println(json);
  }
```
```java:実行結果
> Task :Main.main()
{ "id": "1", "name": "Mike", "gender": "male" }
```
# まとめ
テキストブロックは3つのダブルクオート（"""）で囲むことで定義できます。

従来の1つのダブルクオートで囲む`”文字列”`のなかで、文字列として`”`を扱いたいときは、エスケープ（\）を記述しなければいけないなど、非常に面倒で、かつ可読性が低下していましたが、テキストブロックによってそれらは解決します。

テキストブロックの使い所としては、JavaでJSONやXML、SQL、HTMLなどを記述するときのとても有用ですね！

以上ですー