引き続き、Mystic#の新しい構文および拡張された構文の一部を紹介します。
・CreateObject キーワード update!
従来 CreateObject キーワードはGUI部品の生成のために使用していましたが、
Mystic#ではクラスおよび構造体のインスタンス生成に使用します。
それに伴い、型の指定およびコンストラクタ引数の指定が可能となりました。
・ReleaseObject キーワード new!!
ReleaseObject キーワードは、インスタンスの破棄を行うために使用します。
通常、オブジェクトが Null でないかどうか、Dispose を実装しているかどうかを
チェックする必要がありますが、ReleaseObject はそれらのチェック処理を隠蔽します。
ReleaseObject は、以下のコードと同義です。
・Is 、IsNot 演算子 new!!
参照型が、あるクラスの型である・または継承していることを調べる演算子です。
インタフェースを実装しているかどうかのチェックにも使用できます。
・CreateCOM 、ReleaseCOM キーワード new!!
CreateCOM キーワードは、COMオブジェクトの生成に使用します。
プログラムIDを指定する必要があります。
ReleaseCOM キーワードは、指定されたCOMオブジェクトを完全に解放します。
※ここでいう"完全"は、参照カウントがゼロになる状態です。
以下ではExcelブックを開き、セルに値を設定して保存しています。
・CreateObject キーワード update!
従来 CreateObject キーワードはGUI部品の生成のために使用していましたが、
Mystic#ではクラスおよび構造体のインスタンス生成に使用します。
それに伴い、型の指定およびコンストラクタ引数の指定が可能となりました。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Random [rnd]
rnd = CreateObject[Random]
Console.WriteLine [rnd.Next]
rnd = CreateObject[Random, 123]
Console.WriteLine [rnd.Next]
Console.ReadKey [True]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Random [rnd]
rnd = CreateObject[Random]
Console.WriteLine [rnd.Next]
rnd = CreateObject[Random, 123]
Console.WriteLine [rnd.Next]
Console.ReadKey [True]
MethodReturn
・ReleaseObject キーワード new!!
ReleaseObject キーワードは、インスタンスの破棄を行うために使用します。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
#import [System.IO, System.Text]
*~Main
Var StreamReader [file]
file = CreateObject[StreamReader, "test.txt", Encoding.UTF8]
//何かしらのファイル操作処理
ReleaseObject [file]
Console.ReadKey [True]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
#import [System.IO, System.Text]
*~Main
Var StreamReader [file]
file = CreateObject[StreamReader, "test.txt", Encoding.UTF8]
//何かしらのファイル操作処理
ReleaseObject [file]
Console.ReadKey [True]
MethodReturn
通常、オブジェクトが Null でないかどうか、Dispose を実装しているかどうかを
チェックする必要がありますが、ReleaseObject はそれらのチェック処理を隠蔽します。
ReleaseObject は、以下のコードと同義です。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
#import [System.IO, System.Text]
*~Main
Var StreamReader [file]
file = CreateObject[StreamReader, "test.txt", Encoding.UTF8]
//何かしらのファイル操作処理
//ReleaseObject [file]
If [(file IsNot Null) && (file Is IDisposable)]
file.Dispose
End If
file = Null
Console.ReadKey [True]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
#import [System.IO, System.Text]
*~Main
Var StreamReader [file]
file = CreateObject[StreamReader, "test.txt", Encoding.UTF8]
//何かしらのファイル操作処理
//ReleaseObject [file]
If [(file IsNot Null) && (file Is IDisposable)]
file.Dispose
End If
file = Null
Console.ReadKey [True]
MethodReturn
・Is 、IsNot 演算子 new!!
参照型が、あるクラスの型である・または継承していることを調べる演算子です。
インタフェースを実装しているかどうかのチェックにも使用できます。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Random [rnd]
If [rnd Is Null]
Console.WriteLine ["rndはNullです"]
End If
rnd = CreateObject[Random]
If [rnd IsNot IDisposable]
Console.WriteLine ["RandomクラスはIDisposableを実装していません"]
End If
Console.ReadKey [True]
MethodReturn
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Random [rnd]
If [rnd Is Null]
Console.WriteLine ["rndはNullです"]
End If
rnd = CreateObject[Random]
If [rnd IsNot IDisposable]
Console.WriteLine ["RandomクラスはIDisposableを実装していません"]
End If
Console.ReadKey [True]
MethodReturn
・CreateCOM 、ReleaseCOM キーワード new!!
CreateCOM キーワードは、COMオブジェクトの生成に使用します。
プログラムIDを指定する必要があります。
ReleaseCOM キーワードは、指定されたCOMオブジェクトを完全に解放します。
※ここでいう"完全"は、参照カウントがゼロになる状態です。
以下ではExcelブックを開き、セルに値を設定して保存しています。
#program [Sample]
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Object [excel, books, sheets]
Var Object [book, sheet, cells]
Try
Console.WriteLine ["start"]
excel = CreateCOM["Excel.Application"]
excel.DisplayAlerts = False
excel.Visible = False
//ブックの取得
books = excel.Workbooks
book = books.Open("C:test.xls")
//シートの取得
sheets = book.Worksheets
sheet = sheets{1}
//セルに値を設定
cells = sheet.Cells
cells{1, 1}.Value = "1"
cells{2, 1}.Value = "2"
cells{3, 1}.Value = "3"
book.Save
Catch [Exception ex]
Console.WriteLine [ex.Message]
Finally
If [excel IsNot Null]
excel.Quit
End if
//解放
ReleaseCOM [cells]
ReleaseCOM [sheet]
ReleaseCOM [sheets]
ReleaseCOM [book]
ReleaseCOM [books]
ReleaseCOM [excel]
Console.WriteLine ["end"]
Console.ReadKey [True]
End Try
MethodReturn
#method [Main, String, *~Main, Integer] As Global
*~Main
Var Object [excel, books, sheets]
Var Object [book, sheet, cells]
Try
Console.WriteLine ["start"]
excel = CreateCOM["Excel.Application"]
excel.DisplayAlerts = False
excel.Visible = False
//ブックの取得
books = excel.Workbooks
book = books.Open("C:test.xls")
//シートの取得
sheets = book.Worksheets
sheet = sheets{1}
//セルに値を設定
cells = sheet.Cells
cells{1, 1}.Value = "1"
cells{2, 1}.Value = "2"
cells{3, 1}.Value = "3"
book.Save
Catch [Exception ex]
Console.WriteLine [ex.Message]
Finally
If [excel IsNot Null]
excel.Quit
End if
//解放
ReleaseCOM [cells]
ReleaseCOM [sheet]
ReleaseCOM [sheets]
ReleaseCOM [book]
ReleaseCOM [books]
ReleaseCOM [excel]
Console.WriteLine ["end"]
Console.ReadKey [True]
End Try
MethodReturn
興味があるので、ぜひ公開していただきたいです。
エディタが開発着手出来ておらず、コンパイラもまだ80%程度の完成度なので
公開はしておりませんが、プレビュー版としてなら
コンパイラのみ公開することは出来そうです。
コンパイラだけですので、昔のCのように
コマンドラインでのコンパイルを行う、GUIを自力で記述する、
といった面倒がありますがそれでもよろしければ
準備します。