リテラル

リテラルは、プログラム中で参照することのできる自己定義定数です。リテラルは、RPG IV データ・タイプのいずれかに含めることができます。

文字リテラル

文字リテラルを指定する場合の規則は次のとおりです。

16 進数リテラル

16 進数リテラルを指定する場合の規則は次のとおりです。

数値リテラル

数値リテラルを指定する場合の規則は次のとおりです。

浮動形式の数値リテラルは、異なった方法で指定されます。 浮動リテラルの形式は次のとおりです。

     <mantissa>E<exponent>

ここで、

     <mantissa> は、上記で説明した 1 から 16 桁のリテラルです。
     <exponent> は、-308 から +308 までの値を持つ、小数部
                なしのリテラルです。

次のリストは、有効な浮動リテラルをいくつか例証したものです。

    1E1                = 10
    1.2e-1             = .12
    -1234.9E0          = -1234.9
    12e12              = 12000000000000
    +67,89E+0003       = 67890  (コンマは小数点です)

次のリストは、無効な浮動リテラルをいくつか例証したものです。

    1.234E                          <--- 指数がありません
    1.2e-                           <--- 指数がありません
    -1234.9E+309                    <--- 指数が大きすぎます
    12E-2345                        <--- 指数が小さすぎます
    1.797693134862316e308           <--- 値が大きすぎます
    179.7693134862316E306           <--- 値が大きすぎます
    0.0000000001E-308               <--- 値が小さすぎます

日付リテラル

日付リテラルは形式 D'xx-xx-xx' をとります。ここで、

時刻リテラル

時刻リテラルは形式 T'xx:xx:xx' をとります。ここで、

タイム・スタンプ・リテラル

タイム・スタンプ・リテラルは、形式 Z'yyyy-mm-dd-hh.mm.ss.mmmmmm' を とります。ここで、

図形リテラル

図形リテラルは形式 G'oK1K2i' をとります。ここで、

UCS-2 リテラル

UCS-2 リテラルは、形式 U'Xxxx...Yyyy' をとります。ここで、

UCS-2 リテラルは、モジュールのデフォルトの UCS-2 CCSID 内にあると想定されます。

リテラルの定義例

図 48. 名前付き定数の定義
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
H DATFMT(*ISO)
 * Examples of literals used to initialize fields
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D.....................................Keywords+++++++++++++++++++++++++++++
D DateField       S               D   INZ(D'1988-09-03')
D NumField        S              5P 1 INZ(5.2)
D CharField       S             10A   INZ('abcdefghij')
D UCS2Field       S              2C   INZ(U'00610062')
 * Even though the date field is defined with a 2-digit year, the
 * initialization value must be defined with a 4-digit year, since
 * all literals must be specified in date format specified
 * on the control specification.
D YmdDate         S               D   INZ(D'2001-01-13')
D                                     DATFMT(*YMD)
 * Examples of literals used to define named constants
D DateConst       C                   CONST(D'1988-09-03')
D NumConst        C                   CONST(5.2)
D CharConst       C                   CONST('abcdefghij')

 * Note that the CONST keyword is not required.
D Upper           C                   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

 * Note that the literal may be continued on the next line
D Lower           C                   'abcdefghijklmn-
D                                     opqrstuvwxyz'

 * Examples of literals used in operations
C                   EVAL      CharField = 'abc'
C                   IF        NumField > 12
C                   EVAL      DateField = D'1995-12-25'
C                   ENDIF

長さがゼロのリテラルの使用例

図 49. 長さがゼロの文字、図形、および UCS-2 リテラル
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
D.....................................Keywords+++++++++++++++++++++++++++++
 * The following two definitions are equivalent:
D varfld1         S              5    INZ VARYING
D varfld2         S              5    INZ('') VARYING
 * Various fields used by the examples below:
D blanks          S             10    INZ
D vblanks         S             10    INZ('   ') VARYING
D fixfld1         S              5    INZ('abcde')
 * VGRAPHIC and VUCS2 are initialized with zero-length literals.
D vgraphic        S             10G   INZ(G'oi') VARYING
D vucs2           S             10C   INZ(U'') VARYING
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq++++
 * The following statements do the same thing:
C                   eval      varfld1 = ''
C                   clear                   varfld1
 * Moving '' to a variable-length field using MOVE(P) or MOVEL(P)
 * sets the field to blanks up to the fields current length.
C                   move(p)   ''            varfld1
C                   movel(p)  ''            varfld1

 * Moving '' to a fixed-length field has no effect in the following
 * examples:  (The rightmost or leftmost 0 characters are changed.)
C                   move      ''            fixfld1
C                   movel     ''            fixfld1

 * The following comparisons demonstrate how the shorter operand
 * is padded with blanks:
C                   eval      *in01 = (blanks = '')
 * *in01 is '1'

C                   eval      *in02 = (vblanks = '')
 * *in02 is '1'

C                   eval      *in03 = (varfld2 = blanks)
 * *in03 is '1'

C                   eval      *in04 = (varfld2 = vblanks)
 * *in04 is '1'

C                   eval      *in05 = (%len(vgraphic)=0)
 * *in05 is '1'

 C                  eval      *in06 = (%len(vucs2)=0)
 * *in06 is '1'