![]() |
今までは、eval タグを使ってこんなふうに DatePlugin クラスのメソッドを直接呼び出してたわけだけど… |
![]() |
うん? |
![]() |
これだと TJS スクリプトの書き方を知らないとプラグインが使えないよね。 |
![]() |
えっと、確か §4.1 で、 TJS スクリプトの書き方を知らなくてもプラグインを使えるようにするためにマクロを作るって言ってたよね? |
![]() |
うん。 というワケで、今回はプラグイン用のマクロを作ってみるね。 |
![]() |
プラグイン用のマクロってどうやって作るの? |
![]() |
作り方は普通のマクロと同じだよ。 例えばこんな感じ。 |
<マクロを使ったプラグインの例>
![]() |
InformPlugin クラス がどんなクラスかは解るよね? |
![]() |
えっと、showMessage っていうメソッドがあって、 呼び出されると inform メソッドを使ってメッセージを表示するんだよね? |
![]() |
そ。この InformPlugin クラスはメッセージを表示するだけのプラグイン。 |
![]() |
だったら… |
![]() |
あ~、『だったら [eval exp="System.inform('メッセージ')"] とかでいいじゃん』っていうツッコミはなしね。 このプラグインはあくまで説明用だから。 |
![]() |
う、うん…わかった。 えっと、じゃあ、なんで showMessage メソッドの引数をわざわざ辞書配列にしてるの? message と caption しか使ってないんだから、引数を2つにすればいいんじゃない? |
![]() |
それは messagebox マクロを定義してる部分を見ればわかると思うよ。 |
![]() |
showMessage メソッドの引数が mp になってるけど…この変数ってどこにも宣言されてないよね? この mp ってなんなの? |
![]() |
mp っていうのは、マクロに指定されてる属性が記録されてる辞書配列なんだ。 つまり… |
<messagebox マクロの使用例>
![]() |
こんなふうに messagebox マクロを実行すると、
mp.message の値が "マクロを使おう!" になって、
mp.caption の値が "messageboxマクロ" になるんだ。 ちなみにこれを実行するとこうなるよ。 |
<実行結果>
![]() |
ってことは、mp を引数に指定しとけば、 呼び出されたメソッドの中でマクロに指定されてる属性の値が全部参照できるってこと? |
![]() |
ん、そういうこと。 |
![]() |
あ、属性が指定されてない時はどうなるの? 例えば… |
![]() |
こんなふうに、caption 属性が指定されてない時とか。 |
![]() |
その時は mp.caption は void になるんだ。 つまり、showMessage メソッドの中で System.inform("マクロを使おう!"); が実行されるから、こうなるよ。 |
<実行結果>
![]() |
ふぅん、そうなんだ。 じゃあ、message 属性を省略したりとか、 message 属性と caption 属性を両方省略したりもできるってこと? |
![]() |
ん~、できなくはないけど、inform メソッドの第1引数はデフォルト値が決められてないから、 少なくとも message 属性は指定するようにした方がいいと思うよ。 |
![]() |
あ、そういえば §1.5 と §1.17 で inform メソッドは第2引数だけデフォルト引数が決めてあるから省略できるって言ってたよね。 |
![]() |
うん。 今回の場合は属性を省略してもまぁ大丈夫なんだけど、 デフォルトの値が決められてない属性を省略すると、もしかしたら動作がヘンになっちゃうかもしれないから、 省略できない属性はちゃんと指定されてるかどうかチェックしといた方がいいかもね。 |
![]() |
指定されてなかったら警告のメッセージを出すとか? |
![]() |
ん、そんな感じだね。 |
![]() |
そっか。わかった。 |
![]() |
それじゃ、今回はここまでね。 |
![]() |
今回は短かったね。 |
![]() |
でも、プラグイン用のマクロの基本はだいたい解ったでしょ? |
![]() |
うん、まぁね。 |
![]() |
次回は DatePlugin クラスのメソッドをマクロから呼び出してみるね。 それじゃ、また次回! |