某掲示板のスレタイ風味自重。
さて今回も命令のピックアップをやっていきます。
(ところでこの記事って何人の方に見てもらってるんだろう…
記事までマイナーな予感だけどそれが鶏唐揚クオリティ)
さて、前々回で変数の型は3つしかねぇ!って言いましたが、
実はBinaryXXXX系の命令でバイト配列が扱えます。
ただ取得も格納も命令で行うので普通の変数のような扱い方は
できません。中身を画面に表示するだけでも大変ですw
Integer [BinData, forI]
BinaryAlloc [1, 10]
StringToBinary [1, "ABCDE"]
For [forI, 0, 9, 1]
BinaryGet [1, BinData, forI]
Print [BinData + "\n"]
Next
Stop
実行結果
で。コードと実行結果でもうお分かりかと思います。
文字列がUnicode扱い
そこまでVB6に似せなくても…というか文字列そのまま投げてるのか。
なおFor文の引数はBASICと同じ並びとなってます。
BASICで書くと以下。
For forI = 0 To 9 Step 1
文字列はUnicode扱いですが、
ファイルに出力するとShift-JISになるのも
VB6風味
さてお次は命令ではないのですが、システム変数やらエスケープ文字やら、
言語仕様に近い部分を見ていきます(なんか順番が逆な気がするけど鶏唐揚クオリティだから仕方ないw)
エスケープ文字は以下のとおり(リファレンスから引用)
| 記号 |
対応文字 |
| \r |
キャリッジリターン |
| \l |
ラインフィード |
| \n |
改行("\r\l"と同等) |
| \c |
,(コンマ)(Ver1.70からは使用しなくても動作します。) |
| \q |
"(ダブルクォーテーション) |
| \t |
タブ文字 |
| \0 |
ヌル文字 |
| \\ |
\(円文字) |
カンマがエスケープ文字じゃないとだめって言うのはクレーム来たんだろうなぁ…
1.70から修正改良されています(失礼
タブ文字かんのか?と思って試したところ、
実行時に半角スペース1個に変換されてました。
中間コードの仕様のせいかね…
あと改行が特殊。普通は\r\nですがMysticSLでは\r\l。で、それと同等なのが\n。
「Windowsの改行」という意味で1つの役割を与えたんでしょうかね。
こうしてみるとこの言語は1役割1要素が多いような印象です。
1要素で組み合わせによって役割が変わる等、初心者が混乱しやすい部分を排除したんでしょうか。
そのおかげで中級者以上は確実にウザいと感じるでしょう(失礼
お次はシステム変数とやらですが、
これはMSLという名前空間(という表現が適切かは不明)に所属しているようです。
打ってみるとコード補完キタ───(゚∀゚)───!!

teまで打ったら前方一致してるものが選択されてます。思わぬところで便利設計。
これはGUIのとき楽しみだなぁうふふふ(変態
MSLに属しているものを列挙してみます(リファレンスから引用)
変数
| 変数 |
説明 |
| hWnd |
スクリプトウィンドウのハンドル |
| hDC |
スクリプトウィンドウのデバイスコンテキストハンドル |
| Path |
スクリプトのパス |
| TextX |
次に文字が表示されるX座標 |
| TextY |
次に文字が表示されるY座標 |
| ScreenX |
デスクトップ解像度の幅 |
| ScreenY |
デスクトップ解像度の高さ |
| TargetWin |
現在選択されているウィンドウのID |
| EventWin |
最後にイベントが発生したウィンドウのID |
| CmdLine |
コマンドライン文字列 デバッグ時はオプションで設定されたコマンドラインが渡されます。 |
| Me |
自アプリケーションの実行状況 デバッグ時は常にFalseが渡されます。 |
| DebugMode |
デバッグ実行時は常にTrueが渡されます。 |
| MSLVersion |
MysticSL本体のバージョンが返ります。 |
定数
| 定数 |
説明 |
| True |
1 |
| False |
0 |
| Null |
ヌル値 |
| NullC |
ヌル文字(文字コード0) |
| NullS |
ヌル文字列(長さ0の文字列) |
| PI |
円周率 |
これらはMSL.を省略してもいけるようで。
画面解像度の取得や、Printで次に書き出される座標も取得できるようですが
やはり使い道があまり思いつかないのは私の脳が貧相なせいでしょう。
「最後にイベントが発生したウィンドウのID」とかはおそらくGUIに関することでしょう。
複数ウィンドウをIDで管理しているようです。
かっ飛ばしていきます。次はプリプロセッサディレクティブ(のようなもの)です。
これはVBではなくC風味ですね。
#と打ったらいきなりコード補完キタ───(゚∀゚)───!!

これも前方一致選択してくれます。
ディレクティブを補完してくれるのは初めて見ました。
ただこの中で#subrogateってのが謎だったのでリファレンス見てみました。
代替命令を使用します
(´・ω・`)??
他言語に慣れているユーザが慣れた命令に置き換えたい場合や
MSL命令の習得が困難で、簡単な命令に置き換えたい場合に使用します
Printを「プリント」とか「出力」に置き換えられるということかっ!
正直いらない
リファレンス自身にも「非推奨」と書いてありましたから、完全にネタでしょうw
やはり只者ではないなお主…
あぁ解説記事書くのって大変だ。疲れるw
このあたりで息抜きとしてちょろっと作ってみたものを置いときます。
Integer [forI]
String [Result]
Result = ""
For [forI, 1, 100, 1]
If [forI % 3 == 0 && forI % 5 == 0]
Result = Result + "FizzBuzz\n"
ElseIf [forI % 3 == 0]
Result = Result + "Fizz\n"
ElseIf [forI % 5 == 0]
Result = Result + "Buzz\n"
Else
Result = Result + forI + "\n"
End If
Next
Print [Result]
//画面に表示しきれないのでクリップボードへw
ClearClipboard
SetClipText [Result]
Stop
有名なFizzBuzz問題ですね。
あ、演算子の説明してねぇや(ぉぃ
演算子も基本的にC風味です(リファレンスから引用)
算術・論理演算子
| 優先度 |
演算子 |
| 1 |
^(べき乗) |
| 2 |
*(乗算) /(除算) %(余り) \(整数除算) |
| 3 |
+(加算) -(減算) |
| 4 |
&(論理積) |(論理和) !(排他的論理和) |
比較演算
| 優先度 |
演算子 |
| 1 |
==(等しい) !=(等しくない) <(小さい) >(大きい) <=(以下) >=(以上) |
| 2 |
&&(双方ともTrueであるとき) |
| 3 |
||(どちらか一方でもTrueであるとき) |
「等しくない」演算子、BASICのように<>とも書けます。
とりあえず今回はここまでにします。
説明ばっかだなぁ…見てておもしろいんかなぁ。
記事を書くことの難しさを実感orz