💬

文字列リテラル中で改行できる言語,できない言語

2023/06/05に公開

表にしました.

言語 文字列リテラル中での改行
Perl
PHP
Ruby
D
Rust
Julia
Bash, Zsh 等
Java """""" で可
Python """""" 等で可
Elm """""" で可
C 不可
C++ 不可(生文字列リテラルで可)
C# 不可(生文字列リテラル等で可)
Go 不可(生文字列リテラルで可)
Lua 不可(長括弧で可)
JavaScript 不可(テンプレートリテラルで可)

他に,改行周りで面白い仕様の言語があったら教えてほしいです.

補足

Java

Java15 以降では,"" の代わりに """""" を使うと改行を含められます.

Python

Python では,''"" の代わりに ''''''"""""" を使うと改行を含められます.

ちなみに,前に rR を付けると生文字列リテラル,fF を付けるとフォーマット済み文字列リテラルです.

Elm

フォロワーに教えてもらいました.

C++

C++11 から raw string literal R"" が導入され,() の中でエスケープが無効になります.このとき,改行も含められるようになります.

C#

C# の @ は「逐語的に解釈しろ」という意味で,文字列リテラル "" の前に付けて @"" とするとエスケープが無効になります.このとき,改行も含められるようになります.

また,C# 11 で導入された生文字列リテラル """""" を使うと,エスケープが無効になることと改行が含められること以外に,インデントまでよしなにされます.これは嬉しい.

Go

Go の生文字列リテラルはバッククォート ` 〜 ` で,エスケープが無効になるとともに改行が含められます.

Lua

これもフォロワーに教えてもらいました.Lua の生文字列リテラル相当(エスケープ無効 & 改行可)は [[]] だそうです.

JavaScript

JavaScript はバッククォート ` 〜 ` でくくってテンプレートリテラルを書けます.これは,${} 中に式を埋め込めるというものです(Python のフォーマット済み文字列に相当).このとき,改行も含められるようになります.

Discussion