2012年12月21日金曜日

VDM++のgetter・setterを生成するサクラエディタのマクロ書いた

VDM++は、仕様記述言語かつオブジェクト指向言語。VDM++にはレコード型という構造体のような型が組み込まれているし、仕様記述言語なので、タイトルにあるようなgetter・setterは使いたくない所ではある。
ただ、例えば汎用的なフレームワークやライブラリーを書きたいシーンや、コード生成を前提に周辺クラスとの連携をするシーンにおいては、インスタンス変数とgetter・setterのセットが含まれたクラスを書くこともある。
その時、このgetter・setterを書くのが面倒だと、常日頃思ってた。定型的な書き方なのに記述量は割りと多い。これを解決するには、2つの方法がある。
  • インスタンス変数をpublicにする
  • getter・setterの記述を生成する仕組みを作る
今回は、2.の生成する仕組みをサクラエディタのマクロとして実現した。Windowsでサクラエディタを使ってVDM++を書くという、超ニッチなニーズがどこにあるのか分かんないけど、少なくとも自分は常用するマクロなので、どこか他の人にもで役に立つといいなと思って公開する。

ダウンロード

GitHubからダウンロードしてください。
VDMgetterSetterGen.js

使う準備

まずは、サクラエディタにマクロの登録をする。
任意の場所にマクロを置いて、[設定] -> [共通設定]。[マクロ]タブの空いている所に、以下のように設定して、[設定]ボタンを押す。
WS001
WS001 posted by (C)mas
続いて、[キー割り当て]タブにてキーを割り当てる。例えば自分の場合は[Shift+Ctrl+g]にしてる。
WS002
WS002 posted by (C)mas
こうすれば、[ツール] -> [登録済みマクロ]以下に、設定したマクロとキーが設定されているはず。

使い方

まずは、以下のようにクラスにインスタンス変数を定義する。1行に1インスタンス変数にする。初期値はあってもなくても良い。

class EntityClass

instance variables
  id : nat := 0;
  flag : bool := true;
  aClass : Aclass;

end EntityClass

次に、getter・setterを生成するインスタンス変数を選択してコピーする。
WS003
WS003 posted by (C)mas
コピーした状態で生成したい場所にカーソルを移動し、マクロを設定したキーを押す。すると、getter・setterが生成される。
WS004
WS004 posted by (C)mas
ちなみに、boolのインスタンス変数で生成した場合は、getterがis○○になる仕様。
WS005
WS005 posted by (C)mas

仕様

  • 操作名は、「getインスタンス変数名」と「setインスタンス変数名」
  • インスタンス変数名の最初は大文字にする
  • boolのインスタンス変数は、getterが「isインスタンス変数名」になる
  • 改行コードはCRLF
もし想定通りに動かないとか、こうした方が良い、があればぜひご意見お願いします。

0 コメント:

コメントを投稿