Use macro.
マクロの中で最も使われるものが、#defineと$$$による文字列の置き換えです。
他の言語でいうCONSTと同じイメージです。
#define 宣言名 置換文字
で宣言し
$$$宣言名 をコンパイル時に置換文字に置き換えます。
// 次の行で TaxRate を宣言し、その値は1.08としている
// 消費税率 8%
#define TaxRate
1.08
getTaxPrice(val)
Public {
Quit val *
$$$TaxRate
// この行は置き換えにより Quit val * 1.08 としてコンパイルされる
}
このプログラムをtest.macという名前で保存したとすると、プログラムは次のように動作します。
USER> Write $$getTaxPrice^test(1000)
1080
getTaxPrice関数に1000を渡すと、TaxRateの倍率1.05倍した値となる、1080が返されました。
消費税率が10%に変わった場合は、#defineの値を 1.08 から 1.10 に変更してから、ルーチンをコンパイルする必要があります。
#defineは定数の置き換えだけではなく、関数の呼出をすることができます。
#; $H形式をYYYYMMDD形式に変換する
#define Horo2YYYYMMDD(%horo)
$ZDate(%horo,8)
test()
Public {
Set h =
$H
Write $$$Horo2YYYYMMDD(h) //
この行はコンパイル時に Write $ZDate(h,8) に置換される
}
関数を置換対象とする場合、引数は%horoのように
%付きで宣言する必要があります。
さらに、#defineは定数や関数に限らず、コマンドまで含めて置換することができます。
#;
CConsolelogに指定された重大度(%lv)でログ(%msg)を記録する
#define WriteCConsoleLog(%lv,%msg)
Do $ZU(9,"",%msg,0,%lv)
test()
Public {
$$$WriteCConsoleLog(1,"書込みテスト")
}
これらを上手く使うと、プログラムの記述が効率化されると思います。
マクロを利用してプログラミングを行うと、複数のプログラムで同じマクロの宣言を行う場面が数多く出てきます。
こういった場合には
インクルードファイルと呼ばれるものを作成し、そこに共通で使用する宣言を記述すると便利です。
インクルードファイルは、次のような手順で作成します。
- Cache'スタジオのファイル→新規作成
- 一般タブのCache ObjectScriptルーチンを選択しOK
- ファイル→名前を付けて保存
- ファイル名欄に ファイル名.inc ファイルの種類に インクルードファイル(*.inc)
を選択し保存を実行する。
インクルードファイルの例
インクルードファイル AAA.inc を各プログラムで参照するには、次のように記述します。
MAC形式 |
#include AAA |
CLS形式 |
Include AAA |
CSP形式 |
<csp:class includes="AAA"> |
いずれも .inc は必要ありません。
記述する場所は各ファイルの先頭です。
ドキュメントを参照していると、クラスの戻り値が正常かどうか判定している部分で$$$OKというマクロを使用していることがよくあります。
これは%occStatus.incというシステム・インクルードファイルで定義されています。
%occSatus.incは%occInclude.incファイルから呼び出されています。
%occIncludeはclsでは自動的にインクルードされるもののようです。
mac形式では自動的にインクルードされないので、必要であれば #define %occInclude とファイル先頭に書くとよいでしょう。