対象の日付が、今日の日付を基軸として翌日か翌日以外かを表示する処理になります。
自由形式 (Free-Form)
自由形式のプログラムは、より現代的なRPG IVの構文を使用しており、読みやすく、理解しやすいです。プログラムは以下のステップで構成されています:
- 日付の宣言と初期化: 現在日付(
WK_NOW
)と対象日付(WK_TARGET
)を数値型で宣言し、対象日付は初期値を持ちます。 - 現在日付の計算: 現在のシステム日付から年、月、日を取得し、
YYMMDD
形式でWK_NOW
に設定します。 - 日付の比較:
%DIFF
ビルトイン関数を使用して、WK_TARGET
とWK_NOW
の日付差を計算します。 - 条件判定: 日付差が1日ならば「翌日です」、それ以外は「翌日ではない」と表示します。
このプログラムは、RPG IVの関数と日付処理機能を効果的に利用しています。
フリーフォーム
// プロシージャを宣言します
DCL-PROC DSP_TOMORROW;
// 変数を宣言し初期化
DCL-S Today ZONED(8:0) INZ(%DEC(%CHAR(%DATE():*ISO0):8:0));
DCL-S TargetDate ZONED(8:0) INZ(20240401);
DCL-S DaysDiff ZONED(3:0);
// 対象日付と今日の日付の差を計算
DaysDiff = %DIFF(%DATE(TargetDate): %DATE(Today): *DAYS);
// 日付を比較して翌日かどうかを判定
IF DaysDiff = 1;
DSPLY '翌日です';
ELSE;
DSPLY '翌日ではない';
ENDIF;
// プロシージャを終了
RETURN;
END-PROC;
固定長形式 (Fixed-Form)
固定長形式のプログラムは、RPG IVの古いスタイルを反映しており、以下のように構成されています:
- 変数の宣言:
WK_DIFF
変数を宣言し、比較結果を保持します。 - 日付の設定: 日付を直接数値として設定し、
DATE_S
(現在日付)とDATE_N
(比較日付)に移動します。 - 日付の比較:
%DIFF
関数を用いて日付間の差を計算し、WK_DIFF
に格納します。 - 表示: 計算された日数差をディスプレイに表示します。
このスタイルでは、C言語スタイルの操作子(C
行)と古いRPGの操作コード(例:MOVEL
, Z-ADD
)を使用しています。日付は手動で設定する必要があり、動的には計算されません。
固定長
RPGLEの固定長での記述方法も記載しておきます。
日付の比較をして、比較日数を表示する処理になります。
H Y 1
D WK_DIFF S 2S 0
*******************************************************
C Z-ADD 20240410 WKNOW
C MOVEL WKNOW DATE_S
C Z-ADD 20240501 WKHIKAKU 8 0
C MOVEL WKHIKAKU DATE_N
C EVAL WK_DIFF = %DIFF(DATE_N:DATE_S:*DAYS)
C DSPLY WK_DIFF
総合的なフィードバック
- 自由形式のコードは、現代的なRPG IV開発に適しており、保守性が高く、拡張しやすいです。
- 固定長形式のコードは、レガシーシステムで見られるスタイルであり、新しい開発では推奨されませんが、既存のシステムを理解するためには役立ちます。
どちらの形式も有効ですが、新しいプロジェクトや保守の容易さを考えると、自由形式を推奨します。日付の動的な計算と現代的なプログラミング慣行が組み込まれているためです。