名前付き定数は、VALUE 属性を使って変数を宣言することによって定義できます。 INITIAL 属性を指定して静的変数を使い、 変数を変更しない場合は、VALUE 属性を使って変数を名前付き定数として宣言する必要があります。 コンパイラーは NONASSIGNABLE のスカラー STATIC 変数を、真の名前付き定数として扱いません。
コンパイラーは、コンパイル時に式が評価される時にはいつでも、 より最適化されたコードを生成するので、 名前付き定数を使って、読み易さを低下させずに効果的なコードを生成できます。 例えば次の例では、VERIFY 組み込み関数の 2 通りの使用法を用いて、 同一のオブジェクト・コードが生成されています。
dcl numeric char value('0123456789');
jx = verify( string, numeric );
jx = verify( string, '0123456789' );
次の例は、VALUE 属性を使って、読み易さを低下させずに 最適なコードを取得できる方法を示しています。
dcl x bit(8) aligned; select( x ); when( '01'b4 ) . . . when( '02'b4 ) . . . when( '03'b4 ) . . . end;
dcl ( a1 init( '01'b4)
,a2 init( '02'b4)
,a3 init( '03'b4)
,a4 init( '04'b4)
,a5 init( '05'b4)
) bit(8) aligned static nonassignable;
dcl x bit(8) aligned;
select( x );
when( a1 )
.
.
.
when( a2 )
.
.
.
when( a3 )
.
.
.
end;
dcl ( a1 value( '01'b4)
,a2 value( '02'b4)
,a3 value( '03'b4)
,a4 value( '04'b4)
,a5 value( '05'b4)
) bit(8);
dcl x bit(8) aligned;
select( x );
when( a1 )
.
.
.
when( a2 )
.
.
.
when( a3 )
.
.
.
end;