'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]
フォーマット指定子の文法は以下の通りです。
%
.
精度(省略可能)フラグ | 意味 |
---|---|
- |
左揃えにします。 |
+ |
符号を常に表示します。 |
半角空白 | 符号のための半角空白を表示します。 |
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>
x | x×10 |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
<%%
埋め込み文字列内で <%
を記述するには <%%
と書きます。
$ 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]
値のタイプごとの文字列表現は以下の通りです。
NULL
になります。TRUE
、FALSEは FALSE
になります。[1;2;3]
のように、 ;
で区切って [
]
で囲んだものです。{a:1;b:2}
のように、キーと値を :
で区切り、そのエントリーを ;
で区切り、全体を {
}
で囲んだものです。文字列化の実態は、値の &_
メソッドを呼び出すことで行われます。
オブジェクトの &_
メソッドをオーバーライドすることで、文字列化の処理を変更することができます。
$ 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