Mystic#なブログ

MysticSLの後継言語、Mystic#について話します

Mystic# 紹介 その2

2010-06-08 23:31:48 | Mystic#
いきなりですが、Mystic#で単純なコンソールアプリケーションの
ソースコードを紹介します。
※ソースコードは、Unicodeエンコーディングで保存されている必要があります。

#program [Sample]

#import [System.Collection]

#method [Main, String{}, *~Main, Integer] As Global

*~Main
Var Integer [i]

  For [i, 1, 5, 1]
    Console.WriteLine ["Hello World!"]
  Next

  Return [0]

MethodReturn


単純なコンソールアプリケーションはオブジェクト指向を
意識しないコードも書くことができるため、MysticSLに非常によく似た構文になります。

ここで、MysticSLと異なる点を紹介します。

・#program
ここには、そのファイルが何を表すのかを記述します。

クラスであれば #class、モジュールであれば #module とします。
#program は、プログラムのエントリポイントを記述するための特殊なモジュールを示します。


・#import
名前空間のインポートです。
※この例では意味の無いインポートです。


・#method
#method ディレクティブはMysticSLにも存在していますが、その記述の仕方が異なります。

従来は引数に型の概念を適用できず、引数の数のみ記述していましたが
Mystic#ではメソッド名とメソッドラベルの間に型を書き並べることでそのまま引数とすることができます。

また、メソッドラベルの後ろに1つだけ型を書き加えることができます。
型を記述した場合、メソッドはその型の戻り値を返すようになります。


・As Global
これは可視性を表しています。
可視性はメソッド以外にも、ファイル・プロパティ・変数に適用できます。

MysticSLに存在していた Global、 Local 以外にも、
自クラスおよび継承先でのみ参照可能な Protect、
同アセンブリ内でのみ参照可能な Inner
が新しく追加されています。


・Var Integer
変数の定義です。

MysticSLでは型を直接記述することができましたが、Mystic#では
Var キーワードに続けて型を記述する必要があります。

これは、代入される値によって型が決定される型推論を可能にするための仕様です。


・For
言わずと知れた For ループです

この例ではMysticSLと変わりありませんが、Mystic#ではStep値(第4引数)を省略することができます。


・Return
戻り値の存在するメソッド、およびプロパティのGetアクセサで
値を返しつつ処理を脱出するための命令です。