« Sente Goban | トップページ | プログラミング講座(144) Bスプライン曲線 »

2014/02/21

プログラミング講座(143) Small Basic のエスケープ文字

Small Basic のエスケープ文字に関して記事を書いてみようと思います。

C# では文字列リテラルの中に制御文字を書くときに、\n (改行), ¥t (水平タブ), ¥" (ダブルクォート)などが使えます。このときの ¥ のような文字をエスケープ文字と呼びます。文字列に関しては Small Basic にはこの機能はありません。Virual Basic にもこのエスケープ文字はありませんが、Visual Basic には vbCrLf または ControlChars.CrLf のように制御文字が予め定義されています。Small Basic にはこのような定義もないので、以下のようなコードで自ら定義する必要があります。

sbCrLf = Text.GetCharacter(13) + Text.GetCharcter(10)

それでは、Small Basic にはエスケープ文字がないかというと、2次元以上の配列で内部的に使われています。

cube[1][2][3] = "#336699"
TextWindow.WriteLine(cube) ' 1=2\=3\\\=#336699\\\;\;;

上記のようにエスケープ文字 ¥ が使われています。1次元目の配列の中に2次元目の配列があり、さらにその中に3次元目の配列があります。1次元の配列は、

month[1] = "January"
TextWindow.WriteLine(month) ' 1=January;

のように内部では「インデックス=要素;」の繰り返しで表されています。この要素の部分に2次元目の配列を入れると、「インデックス=インデックス=要素;;」となりますが、記号の = と ; が1次元目のものか2次元目のものか混乱してしまうため、2次元目の記号の前にエスケープ文字を入れて、「インデックス=インデックス¥=要素¥;;」と表現しています。この2次元配列のテキスト表記をさらに配列の要素に入れるときに、内部では記号 ¥, =, ; の前にエスケープ文字を置き、「インデックス=インデックス¥=インデックス¥¥¥=要素¥¥¥;¥;;」のように表現しているわけです。

Visual Basic で配列を初期化するときは、

Dim week = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}

というように複数の要素を1行で設定できます。{} を2重にすれば2次元の配列も初期化できます。
Small Basic では配列を初期化する場合は、

week = "1=Sunday;2=Monday;3=Tuesday;4=Wednesday;5=Thursday,6=Friday;7=Saturday;"

と表現できます。2次元以上の配列を1行で初期化しようとすると、上記のエスケープ文字を駆使する必要がありますが、コードが分かりにくくなるのでおすすめできません。2次元の配列を初期化するときは、行を分けて、

nand[0] = "0=1;1=1;"
nand[1] = "0=1;1=0;"

と書くことをおすすめします。

最後に余談ですが、半角文字 ¥ について。英語圏でのエスケープ文字はバックスラッシュ \(の半角)ですが JIS では同じコードに円記号を割り当てているため、日本のエスケープ文字は ¥ になっています。Unicode になってバックスラッシュと円記号は別のコードが割り当てられるようになりました。Unicode 普及に伴って ¥ のエスケープ文字としての役目は終えて、純粋に円記号としてのみ使われるといいなと思います。

|

« Sente Goban | トップページ | プログラミング講座(144) Bスプライン曲線 »

Small Basic」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: プログラミング講座(143) Small Basic のエスケープ文字:

« Sente Goban | トップページ | プログラミング講座(144) Bスプライン曲線 »