fluorite12

生文字列リテラル 'contents'

生文字列リテラルは ' ' で囲まれた文字列であり、ほとんどの文字をそのまま解釈します。

文字列 意味
'' '
CRLF LF
CR LF
LF LF
' 生文字列の終端
それ以外の文字 その文字自身

シングルクォートコンテント ''

生文字列内で ' を記述するには '' と書きます。

$ flc " 'abc''def' "
# abc'def

改行コンテント

生文字列内には改行を含めることができますが、すべてLFに統一されます。

この性質は、ソースコードの改行コードが変更されてもプログラムの動作が変わらないことを保証します。

$ flc " 'abc
def' "
# abc
# def

文字コンテント abcABC123

上記を除く文字は書いたとおりに解釈されます。

これは $ や ` \ ` も例外ではありません。

$ flc \''abc$def\nop'\'
# abc$def\nop

テンプレート文字列リテラル "contents"

テンプレート文字列リテラルは " " で囲まれた文字列であり、エスケープや埋め込みなどの機能が使えます。

文字列 意味
\" "
\$ $
` \ ` ` \ `
\t タブ文字
\r CR
\n LF
\uXXXX 指定したUnicodeの1文字
上記以外の ` \ ` で始まるシーケンス 構文エラー
CRLF LF
CR LF
LF LF
$ 識別子や括弧類など 埋め込み
$% フォーマット指定子 括弧類 フォーマット付き埋め込み
" テンプレート文字列の終端
それ以外の文字 その文字自身

エスケープシーケンスコンテント \n

エスケープシーケンスコンテントは ` \ ` で始まる一連のシーケンスであり、それぞれ決められた文字を表します。

エスケープシーケンスの一覧は上記の表を参照してください。

` \ ` で始まるシーケンスは将来の機能のために予約されており、不正なシーケンスは構文エラーとなります。

$ flc ' "abc\"def\\ghi\njkl" '
# abc"def\ghi
# jkl

Unicodeの1文字を指定するエスケープシーケンス(文字参照)も利用できます。

$ flc ' "\u3042" '
# あ

改行コンテント

生文字列リテラルの改行コンテントと同様です。

埋め込みコンテント $factor

$ に続いて任意の識別子、リテラル、括弧類を記述でき、その値は文字列化されたうえで文字列に埋め込まれます。

最も一般的な利用形態は、丸括弧によって任意の式を埋め込むことや、単一の識別子を埋め込むことです。

$ flc ' "value is $(100 + 20 + 3)" '
# value is 123

$ flc '
  value := 123
  "value is $value"
'
# value is 123

フォーマット付き埋め込みコンテント $%-+ 07.2f(value)

フォーマット付き埋め込みコンテントは通常の埋め込みコンテントに似ていますが、以下の点で異なります。

$ flc ' "[$%+09.2f(123)]" '
# [+00123.00]

フォーマット指定子の文法は以下の通りです。

  1. %
  1. フラグ(省略可能)
  1. 幅(省略可能)
  1. . 精度(省略可能)
  1. 変換
フラグ 意味
- 左揃えにします。
+ 符号を常に表示します。
半角空白 符号のための半角空白を表示します。
0 スペースの代わりに 0 で埋めます。
変換 意味
d 10進整数
x 16進整数
f 10進小数
s 文字列

文字コンテント abcABC123

上記を除く文字は書いたとおりに解釈されます。

埋め込み文字列リテラル %>contents<%

埋め込み文字列リテラルは %> <% で囲われた独特な見た目の文字列リテラルです。

文字列 意味
<%% <%
CRLF LF
CR LF
LF LF
<%=%> 埋め込み
<% 埋め込み文字列の終端
それ以外の文字 その文字自身

埋め込み文字列リテラルは、特にHTMLコードの生成と相性がよいです。

$ flc '
  %>
    <table>
      <tr style="color: red;"><th>x</th><th>x×10</th></tr>
      <%= 1 .. 3 | x => %>
        <tr><td><%= x %></td><td><%= x * 10 %></td></tr>
      <% %>
    </table>
  <%
'
#     <table>
#       <tr style="color: red;"><th>x</th><th>x×10</th></tr>
#
#         <tr><td>1</td><td>10</td></tr>
#
#         <tr><td>2</td><td>20</td></tr>
#
#         <tr><td>3</td><td>30</td></tr>
#
#     </table>
xx×10
110
220
330

埋め込み文字列終了シーケンスコンテント <%%

埋め込み文字列内で <% を記述するには <%% と書きます。

$ flc '%>[ <%% ]<%'
# [ <% ]

改行コンテント

生文字列リテラルの改行コンテントと同様です。

埋め込みコンテント <%= value %>

<%= %> で囲うと任意の値を文字列化したうえで埋め込むことができます。

丸括弧と同様、内部で宣言された変数が外部に出ない効果があります。

$ flc ' %>value is <%= 100 + 20 + 3 %><% '
# value is 123

文字コンテント abcABC123

上記を除く文字は書いたとおりに解釈されます。

文字列の各文字のストリーム化 string()

文字列の各文字を順番にイテレートするストリームを返します。

$ flc '"abc"()'
# a
# b
# c

文字列の要素アクセス string(index)

配列と同様、文字列の要素にインデックスでアクセスできます。

$ flc '"abc"(1)'
# b

$ flc '"abc"(-1)'
# c

$ flc '"abc"(2, 0)'
# c
# a

文字列の要素アクセス string.index

. 演算子で文字列の要素にアクセスできます。

$ flc '"abc".1'
# b

オブジェクトの要素アクセスと同様に、 . の右辺を式にすることができます。

$ flc '"abc".(1 + 1)'
# c

添え字が負数であった場合は NULL が返されます。

$ flc '"abc".(-1)'
# NULL

インデックスは数値化されたあと、四捨五入されて評価されます。

$ flc '"abc".("0.95")'
# b

文字列化 &value

前置 & 演算子は、値の文字列表現を得るのに使います。

$ flc '&[1..3]'
# [1;2;3]

値のタイプごとの文字列表現は以下の通りです。


文字列化の実態は、値の &_ メソッドを呼び出すことで行われます。

オブジェクトの &_ メソッドをオーバーライドすることで、文字列化の処理を変更することができます。

$ flc '&{`&_`: this -> "The value is $(this.value)"}{value: 100}'
# The value is 100

文字列の結合 string & string

文字列の連結を行うには & 演算子を使います。

$ flc '"abc" & "def"'
# abcdef

部分文字列の取得

string[indices] で部分文字列を取得できます。

$ flc '"abcde"[1..3]'
# bcd

文字列の置換

STRING::replace(old: STRING; new: STRING): STRING

replace メソッドで文字列内の指定した文字列のすべての出現個所を別の文字列に置換できます。

$ flc '"abcabc"::replace("ab"; "AB")'
# ABcABc