<< 目次を表示 >> ページ位置: Enterprise Architectの拡張 > ソースコード生成のカスタマイズ > コード生成テンプレートフレームワーク > コード生成テンプレートの文法 > マクロ > 制御マクロ > 分岐マクロ |
CTFでは、次のマクロで分岐処理を実現する機能提供しています。
この if と elseif の基本的な構成は以下のような構成です。
%if <param> <operator> <param>%
<operator>は以下のうちのいずれかです。
また、 <param>は次のうちのどれかです。
<operator>で<,>,<=,>=のいずれかを利用する場合には、比較対象の<param>は数値として解釈可能な内容である必要があります。
分岐処理はネストする(if文の処理の中でif文を利用する)こともできます。また、以下のものを利用して複数の条件を指定できます。
注意: |
複数の条件を指定した場合には、それぞれの条件の評価は単純に左から右の順番で行われます。 |
なお、条件文では、大文字小文字は区別されます。例えば、"a String"と"A STRING"は一致しません。大文字小文字を無視したい場合には、 $str= TO_LOWER(variable) あるいは TO_UPPER(variable) のようにマクロを実行した結果を変数に格納し、その変数の値を比較することが必要です。
条件文の中で機能マクロを利用できません。機能マクロを利用する場合には、機能マクロを実行した結果を変数に格納し、その結果を条件文の中で利用してください。
$fldType = %TO_LOWER($parameter1)%
$COMMENT = "Use the first 4 characters for Date and Time field types"
$fldType4 = %LEFT($fldType,4)%
%if $fldType4=="date"%
Datetime
%endif%
上記の処理では、 “Datetime”, “DATETIME” および “Date” の場合に、“Datetime”を戻します。
endifやendTemplateマクロは分岐処理を終了させるために利用されます。なお、endTemplateマクロは実行中のテンプレートの処理をすぐに完了し、endTemplate文以降の処理は行いません。
例 1:
%if elemType == "Interface"%
;
%else%
%OperationBody%
%endIf%
この例では、:
例 2:
$bases="ClassBase"
$interfaces=""%
%if $bases !="" and $interfaces !=""%
: $bases, $interfaces
%elseIf $bases !=""%
: $bases
%elseIf $interfaces !=""%
: $interfaces
%endIf%
この例では、 :ClassBase のような文字列が戻ります。
真偽値での条件分岐:
プロパティダイアログやオプションダイアログで、チェックボックスのON/OFFで設定する内容の場合には、条件文は次のようになります。
%if attStatic == "T"%
例:
%if attCollection=="T" or attOrderedMultiplicity == "T"%
%endTemplate%
分岐のための表現として、?文字を利用した3項演算子を利用できます。なお、このマクロでは?以降に変数を利用できません。ご注意ください。 (条件) ? (条件が真のときの値) : (条件が偽のときの値:省略可能)