Mystic#なブログ

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

Mystic# 紹介 その4

2010-06-23 13:23:46 | Mystic#
引き続き、Mystic#の新しい構文および拡張された構文の一部を紹介します。


・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


・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


通常、オブジェクトが 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


・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


・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


3 コメント

コメント日が  古い順  |   新しい順
公開は? (daru)
2010-07-29 09:01:31
まだ公開はされてないんですか?
返信する
Unknown (たけぽい)
2010-08-01 20:06:31
こんにちは、コメントありがとうございます。

エディタが開発着手出来ておらず、コンパイラもまだ80%程度の完成度なので
公開はしておりませんが、プレビュー版としてなら
コンパイラのみ公開することは出来そうです。

コンパイラだけですので、昔のCのように
コマンドラインでのコンパイルを行う、GUIを自力で記述する、
といった面倒がありますがそれでもよろしければ
準備します。
返信する
Unknown (daru)
2010-08-03 09:14:04
回答ありがとうございます。
興味があるので、ぜひ公開していただきたいです。
返信する