10.2 複数の組み込みファンクションの連鎖的結合

LANSA

10.2 複数の組み込みファンクションの連鎖的結合


定義上、組み込みファンクションは結果の要素を返すため、複数の組み込みファンクションをコードの1行に連結することが可能です。

フォームのキャプションを翌日の曜日(火曜日、水曜日など)に設定する、という要件について考えます。

論理的観点から見た場合、コード自体がすべて難しいわけではありませんが、要求された結果を計算する際に、さまざまなデータを保管する多数の変数が必要になる可能性があります。月や年末などを考慮しながら今日の日付を1日進め、結果を曜日に変換しなければなりません。これはBIFでも可能ですが、多数のコード行と一時記憶域が必要になります。

ただし、それぞれが前のファンクションの結果に対して操作を行う複数の組み込みファンクションを使用すれば、コードをコンパクトにし、わかりやすくすることができます。以下に例を示します。

Mthroutine Name(Get_Tomorrow_DOW)

Define_Map For(*Result) Class(#prim_alph) Name(#oTomorrow_DOW)

 

Define Field(#Today) Type(*Date)

 

#oTomorrow_DOW := #Today.Now.Adjust( 1 ).AsDayOfWeek

 

Endroutine

 

上記のコードでは、Now組み込みファンクションを使用して#Todayを今日の日付に設定しています。次にAdjust組み込み関数でその日付を1日進め、最後に、AsDayOfWeekファンクションによって、日付の調整結果を曜日に変換しています。

組み込みファンクションの中には、価値があまりないように思えるものもあります。例えば、Pred (predecessor)は、数値から1を引き、それを結果として返します。このような組み込みファンクションは、主に、より複雑な評価のコンポーネントとして使用されます。一時変数を使用したり、多数の括弧を必要とする式の埋め込みを行ったりする代わりに、組み込みファンクションを使用できます。

以下の例では、number1をnumber2またはnumber3と比較しますが、式の埋め込みが必要なため、結果的に追加の括弧が使用されています。

If ((#Number1 - 1) = #Number2) or ((#Number1 - 1) = #Number3))

Endif

 

上記の例をPred組み込みファンクションを使用して作成すると、以下のようになります。

If ((#Number1.pred = #Number2) or (#Number1.pred = #Number3))

Endif

 

独立した短い例では、埋め込まれた組み込みファンクションの利点を明確に示すことは困難です。ただし、複雑なコードを作成する場合は、式と括弧を最小限にすることで、簡略化という利点が得られるはずです。

Ý組み込みファンクション