プログラミング講座(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 普及に伴って ¥ のエスケープ文字としての役目は終えて、純粋に円記号としてのみ使われるといいなと思います。
| 固定リンク
「Small Basic」カテゴリの記事
- プログラミング講座 (202) 1次元セルオートマトン(2020.09.20)
- プログラミング講座 (201) パラメーター(2020.09.14)
- プログラミング講座 (200) 3次ベジエ曲線(2020.09.14)
- プログラミング講座 (199) スーパー三角関数?(2020.09.02)
- プログラミング講座 (198) スーパー楕円(2020.09.01)
コメント