LoginSignup
0
0

More than 3 years have passed since last update.

fluorite-7 日本語リファレンス 文字列

Posted at

日本語チュートリアルトップ

概要

" "で囲うと文字列が作れる。

$ fl7 '  "abc 123 !#%&()"  '
abc 123 !#%&()

" "内ではいくつかのエスケープが使える。

$ fl7 '  "Tab[\t] Break[\n]"  '
Tab[    ] Break[
]

$identifierで変数の埋め込みができる。

$ fl7 '  "$PI"  '
3.141592653589793

$%.2f(formula)とかでフォーマット付き埋め込みができる。

$ fl7 '  "$%.2f(PI) $%05d(456)"  '
3.14 00456

' 'で囲うと埋め込みは無効になりエスケープの挙動が変わる。

'[$PI][\t][\n]'
$ fl7 '  '\''[$PI][\t][\n]'\''  '
[$PI][t][n]

中置&で文字列を連結できる。

$ fl7 '  "abc" & "123"  '
abc123

前置&で値を文字列に変換できる。

$ fl7 '  TYPE(PI), TYPE(&PI)  '
NUMBER
STRING

前置$#で文字列の長さが得られる。

$ fl7 '  $#"abcdef"  '
6

リテラル

文字列リテラル

文字列リテラル'contents'は、'で始まり、0個以上の文字列リテラルコンテントを含み、'で終わるリテラルである。

文字列リテラルコンテントは、次のうちのいずれかである。

  • 一般文字
  • エスケープ

Tips 文字列リテラルはbash上のワンライナーとしてfluorite-7を使う際に不便なので、多くの場合、代わりの文字列リテラルを使った方がよい。

$ fl7 \''abc123 "[]'\'
abc123 "[]
$ fl7 '%>abc123 "[]<%'
abc123 "[]

一般文字

' \以外のあらゆるUTF-16符号単位を指す。
サロゲートペアは2文字分の扱いである。
改行は、実際にそこに埋め込まれている改行文字を表す。

'abc123 "[]'
$ fl7 \''abc123 "[]'\'
abc123 "[]

エスケープ

エスケープ\aは、\と任意の一つのUTF-16符号単位aの列であり、aがどのような文字であってもaそのものを表す。

例えば'\n''n'と同一である。

'[\n][\'][\\]'
$ fl7 \''[\n][\'\''][\\]'\'
[n]['][\]

埋め込み文字列リテラル

埋め込み文字列リテラル"contents"は、"で始まり、0個以上の埋め込み文字列リテラルコンテントを含み、"で終わるリテラルである。

埋め込み文字列リテラルコンテントは、次のうちのいずれかである。

  • 一般文字
  • エスケープ
  • ドル埋め込み
  • 識別子埋め込み
  • 式埋め込み
  • 書式付き式埋め込み

一般文字

" \ $以外のあらゆるUTF-16符号単位を指す。
サロゲートペアは2文字分の扱いである。
改行は、実際にそこに埋め込まれている改行文字を表す。

"abc123 '[]"
$ fl7 '"abc123 '\''[]"'
abc123 '[]

エスケープ

エスケープ\aは、\と決められた文字列aで構成される列である。

エスケープは、aに応じて異なる文字を表す。
以下は取りうるaと対応する文字の組である。
表中でFで示した個所には任意の1文字の16進数([a-zA-Z0-9])が入る。

a 対応する文字
\ \
" "
' '
$ $
b \x08 後退
f \x0C 書式送り
n \x0A 改行(ラインフィード)
r \x0D 復帰(キャリッジリターン)
t \x09 水平タブ
0 \x00 NULL文字
xFF FF部分の16進数によって表されるUTF-16符号単位
uFFFF FFFF部分の16進数によって表されるUTF-16符号単位
"[\\][\"][\'][\$][\t][\n][\x3D][\u3042]"
$ fl7 '"[\\][\"][\'\''][\$][\t][\n][\x3D][\u3042]"'
[\]["]['][$][   ][
][=][あ]

ドル埋め込み

ドル埋め込み$$は、$を表す。

$ fl7 '"$$"'
$

識別子埋め込み

識別子埋め込み$identifierは、identifierが示す識別子が表す値の文字列化したものを表す。

$ fl7 '"$PI"'
3.141592653589793

$ fl7 'list : [1 .. 3]; "$list"'
1,2,3

式埋め込み

式埋め込み$(expression)は、expressionが示す式の値の文字列化したものを表す。

$ fl7 '"$(PI * 1234)"'
3876.7253345298045

書式付き式埋め込み

書式付き式埋め込み$%format(expression)は、expressionが示す式の値をformatに従って文字列化したものを表す。

formatは、LWPCで表される。
Lは、0個以上の0-である。
Wは、0以外の整数である。
Pは、.の後に整数が続いたものである。
Cは、d s fのうちのいずれかである。
すなわち、formatはPerlの正規表現でいうところの([0\-])*([1-9][0-9]*)?(\.(0|[1-9][0-9]*))?[dsf]である。


Cdである場合、整数の埋め込みである。
Csである場合、文字列の埋め込みである。
Cfである場合、実数の埋め込みである。


Pが指定されている場合、実数の埋め込みにおいて、小数点以下の桁数を指定する。

$ fl7 '"$%f(3.1415)"'
3.141500

$ fl7 '"$%.2f(3.1415)"'
3.14

$ fl7 '"$%.10f(3.1415)"'
3.1415000000

Wが指定されている場合、少なくともその幅になるように右詰めで半角空白が追加される。
幅がWを超過する場合は何も作用しない。

$ fl7 '"[$%5d(123)]"'
[  123]

$ fl7 '"[$%d(123)]"'
[123]

$ fl7 '"[$%2d(123)]"'
[123]

L0が指定されている場合、Wにおいて詰められる文字が0になる。

$ fl7 '"[$%5d(123)]"'
[  123]

$ fl7 '"[$%05d(123)]"'
[00123]

L-が指定されている場合、Wは左詰めとなる。

$ fl7 '"[$%5s("abc")]"'
[  abc]

$ fl7 '"[$%-5s("abc")]"'
[abc  ]

負の数値を0を使用して右詰めにするとき、符号は追加される0の左側に付けられる。

$ fl7 '"[$%05s(-123)]"'
[0-123]

$ fl7 '"[$%05d(-123)]"'
[-0123]

ヒアドキュメント

ヒアドキュメント<< 'delimiter'LBstringLB delimiterは、delimiterが現れるまでのすべての行を文字列にするリテラルである。
delimiterは任意の識別子である。
LBは改行([\r\n]|\r\n)である。
stringdelimiterの行によって挟まれた任意の文字列である。

ヒアドキュメントは次の3個の部分に分かれる。

  • デリミタ宣言
  • ヒアドキュメントコンテント
  • デリミタ

各部分の間には、必ず1個の改行LBが挟まる。

str : << 'END'
string string string string
string string string string
string string string string
END
$ fl7 'str : << '\''END'\''
string string string string
string string string string
string string string string
END'
string string string string
string string string string
string string string string

デリミタ宣言

デリミタ宣言は次のシーケンスである。

  • << 'delimiter'

<<'delimiter'の間には任意の空白文字やコメントを入れてもよい。

str : << /*
  コメント
*/
// コメント
'END'
string string string string
string string string string
string string string string
END

'delimiter'を囲っている'は省略できる。

str : << END
string string string string
string string string string
string string string string
END

ヒアドキュメントコンテント

ヒアドキュメントコンテントは、デリミタを含まない任意のUTF-16符号単位列である。

行中に埋め込まれる形でデリミタと同じ文字列が現れた場合、それはデリミタとして判定されない。

str : << END
string END string string
END string string string
string string string string
END

ヒアドキュメントコンテントの前後には自動的に改行が付与されない。
すなわち、次のコードは真を返す。

"string" === << END
string
END

デリミタ

デリミタは次のシーケンスである。

  • delimiter

delimiterは行頭に来なければならない。
ただし、delimiterの前に半角空白およびタブ文字を任意個挿入してもよい。

  << 'END'
    string
  END

delimiterの直後は行末かソースコードの末尾でなければならない。

埋め込みヒアドキュメント

埋め込みヒアドキュメント<< "delimiter"LBstringLB delimiterは、delimiterが現れるまでのすべての行を文字列にするリテラルであるヒアドキュメントの亜種である。
大まかな仕様はヒアドキュメントに準ずる。

埋め込みヒアドキュメントでは、ヒアドキュメントコンテントの代わりに埋め込みヒアドキュメントコンテントを使用する。

str : << "END"
string string string string
string string string string
string string string string
END
$ fl7 'str : << '"'END'"'
string string string string
string string string string
string string string string
END'
string string string string
string string string string
string string string string

デリミタ宣言

埋め込みヒアドキュメントのデリミタ宣言のdelimiterは、" "で囲われていなければならない。

埋め込みヒアドキュメントコンテント

埋め込みヒアドキュメントコンテントは、0個以上の次のシーケンスで構成される。

  • 一般文字
  • ドル埋め込み
  • 識別子埋め込み
  • 式埋め込み
  • 書式付き式埋め込み

このうち、一般文字はヒアドキュメントコンテントに準ずる。
ドル埋め込み・識別子埋め込み・式埋め込み・書式付き式埋め込みは、埋め込み文字列リテラルに準ずる。

EFL(Embedded Fluorite)

EFLリテラル%>contents<%は、%>で始まり、0個以上のEFLリテラルコンテントを含み、<%で終わるリテラルである。

EFLリテラルコンテントは、次のうちのいずれかである。

  • 一般文字
  • <%埋め込み
  • EFLコメント
  • 式埋め込み

Tips EFLはERBを真似て作られた、HTMLの記述に向いた文字列リテラルである。

ただし、ERBやPHPと異なり、EFLは純粋な「ただの」文字列リテラルであり、標準出力への影響は一切なく、式の一部である。

%>
  <ul>
    <%= 1 .. 5 | %>
      <li><%= _ * 10 %></li>
    <% %>
  </ul>
<%
$ fl7 '%>
  <ul>
    <%= 1 .. 5 | %>
      <li><%= _ * 10 %></li>
    <% %>
  </ul>
<%'

  <ul>

      <li>10</li>

      <li>20</li>

      <li>30</li>

      <li>40</li>

      <li>50</li>

  </ul>

一般文字

<%の左側の<を除くあらゆるUTF-16符号単位を指す。
言い換えると、「直後に%が続く<」以外のすべての文字である。

$ fl7 '%>abc123 "[\n][\<][<][\"][\%][%][$][$PI][\$][$$]<%'
abc123 "[\n][\<][<][\"][\%][%][$][$PI][\$][$$]

<%埋め込み

<%%は、<%を表す。

$ fl7 '%>....<%%....<%'
....<%....

EFLコメント

EFLコメント<%# comment %>は、<%#で始まり、%>を含まない任意の文字列commentが続き、%>で終わるシーケンスである。

EFLコメントは通常のコメントと同様、完全に無視される。

$ fl7 '%>....<%#ここから....<%.<%=....ここまで%>....<%'
........

式埋め込み

式埋め込み<%= expression %>は、<%=で始まり、任意の式expressionが続き、%>で終わるシーケンスである。
式埋め込みはexpressionの文字列化したものを表す。

$ fl7 '%>..<%= PI %>..<%= "abc" %>..<%= [1 .. 3] %>..<%'
..3.141592653589793..abc..1,2,3..

Tips 式埋め込みの中にEFLを記述できる。

$ fl7 '%>..<%= 1 .. 3 | %><b><%= _ %></b><% %>..<%'
..<b>1</b><b>2</b><b>3</b>..

下のコードは上のコードを見やすく改変したものである。

%>
  ..
    <%= 1 .. 3 | %>
      <b>
        <%= _ %>
      </b>
    <% %>
  ..
<%

入れ子にされたEFLは、テンプレートエンジンのように振る舞う。
ループのほか、関数化や条件分岐も可能である。
EFLは飽くまで文字列リテラルであるため、柔軟な記述ができる。

%>
  <%=
    f : _ -> _ ? %>
      Yes
    <% : %>
      No
    <%;
    f(TRUE), f(FALSE)
  %>
<%
$ fl7 '%><%= f : _ -> _ ? %>Yes<% : %>No<%; f(TRUE), f(FALSE) %><%'
YesNo

ストリーマの埋め込み

式埋め込みはストリーマを改行無しで埋め込む。

$ fl7 '%><%= 1 .. 9 %><%'
123456789

変換

文字列化

文字列の文字列化は、その文字列そのものである。

$ fl7 '&"abc"'
abc

数値化

文字列の数値化は、文字列を10進数としてパースする。

$ fl7 '+"00100", +"00100.001", +"00100.001E2"'
100
100.001
10000.1

論理値化

文字列の論理値化は、その文字列が空文字でない場合にTRUE、空文字の場合にFALSEを返す。

$ fl7 '?"", ?"false", ?"FALSE", ?"0", ?" "'
FALSE
TRUE
TRUE
TRUE
TRUE

長さ取得

文字列の長さは、その文字列に含まれるUTF-16符号単位の個数である。
サロゲートペアは長さ2の文字として扱われる。

$ fl7 '$#"𩸽", $#"", $#" ", $#"abc", $#"あ"'
2
0
1
3
1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0