💬
文字列リテラル中で改行できる言語,できない言語
表にしました.
言語 | 文字列リテラル中での改行 |
---|---|
Perl | 可 |
PHP | 可 |
Ruby | 可 |
D | 可 |
Rust | 可 |
Julia | 可 |
Bash, Zsh 等 | 可 |
Java |
""" 〜 """ で可 |
Python |
""" 〜 """ 等で可 |
Elm |
""" 〜 """ で可 |
C | 不可 |
C++ | 不可(生文字列リテラルで可) |
C# | 不可(生文字列リテラル等で可) |
Go | 不可(生文字列リテラルで可) |
Lua | 不可(長括弧で可) |
JavaScript | 不可(テンプレートリテラルで可) |
他に,改行周りで面白い仕様の言語があったら教えてほしいです.
補足
Java
Java15 以降では,"
〜 "
の代わりに """
〜 """
を使うと改行を含められます.
Python
Python では,'
〜 '
や "
〜 "
の代わりに '''
〜 '''
や """
〜 """
を使うと改行を含められます.
ちなみに,前に r
か R
を付けると生文字列リテラル,f
か F
を付けるとフォーマット済み文字列リテラルです.
Elm
フォロワーに教えてもらいました.
C++
C++11 から raw string literal R"
〜 "
が導入され,(
〜 )
の中でエスケープが無効になります.このとき,改行も含められるようになります.
C#
C# の @
は「逐語的に解釈しろ」という意味で,文字列リテラル "
〜 "
の前に付けて @"
〜 "
とするとエスケープが無効になります.このとき,改行も含められるようになります.
また,C# 11 で導入された生文字列リテラル """
〜 """
を使うと,エスケープが無効になることと改行が含められること以外に,インデントまでよしなにされます.これは嬉しい.
Go
Go の生文字列リテラルはバッククォート ` 〜 ` で,エスケープが無効になるとともに改行が含められます.
Lua
これもフォロワーに教えてもらいました.Lua の生文字列リテラル相当(エスケープ無効 & 改行可)は [[
〜 ]]
だそうです.
JavaScript
JavaScript はバッククォート ` 〜 ` でくくってテンプレートリテラルを書けます.これは,${
〜 }
中に式を埋め込めるというものです(Python のフォーマット済み文字列に相当).このとき,改行も含められるようになります.
Discussion