RPG

280. DS の DSは、また DS だ

DS (データ構造定義: Data Structure ) は
C言語などの「構造体」( typedef ) に相当するものである。
C言語の構造体( typedef ) を拡張して関数(メソッド)と要素を構造化したものが
VC++ の Class であり、
Java はこれをさらにオブジェクトにまで拡張して class とした。
このように考えると RPG の DS (=Data Structure) は
構造化したオブジェクトの基本である。

DSは DS自身を要素とする配列として定義することは以前に紹介した。

【 DSの配列の例 】
 
   * OVLR 配列の項目                                 
  D OVLRCD          DS                  QUALIFIED    
  D  RECORD                 1     10A                
  D  LIN                   11     13S 0              
                                                 
   * OVLRCD の 256 個の配列                          
  D OVLR            S                   LIKE(OVLRCD) 
  D                                     DIM(256)     
   * 配列の要素                                      
  D OVL             S              3S 0 INZ(0) 

今回、紹介するのは構造化された DS の例である。
つまり DS を要素とする DS の定義である。

【 TESTDS2: DS から定義される DSの例 】
 
0001.00 H DFTNAME(TESTDS2) DATEDIT(*YMD/) BNDDIR('QC2LE')                                     
0002.00 F**********  二重構造化された DATA STRUCRURE の使い方 *****************               
0003.00 F*                                                                                    
0004.00 F**********************************************************************               
0005.00                                                                                       
0006.00 D FILEDS          DS                  QUALIFIED                                       
0007.00 D  FILE                   1     10                                          ファイル名
0008.00 D  FILLIB                11     20                                          ファイル名
0009.00                                                                                       
0010.00 D PGMDS           DS                  QUALIFIED                                       
0011.00 D  PGM                    1     10                                          ファイル名
0012.00 D  PGMLIB                11     20                                          ファイル名
0013.00                                                                                       
0014.00 D LIBDS           DS                  QUALIFIED                                       
0015.00 D  FILES                              LIKEDS(FILEDS)                                  
0016.00 D  PGMDS                              LIKEDS(PGMDS)                                   
0017.00                                                                                       
0018.00 C                   EVAL      LIBDS.FILES.FILE = 'SHOHIN'                             
0019.00 C                   EVAL      LIBDS.PGMDS.PGM = 'PGM001'                              
0020.00 C                   SETON                                        LR                   
0021.00 C                   RETURN                                                            
【 解説 】

FIELDS はひとつの DS定義であり、PGMDS も DS定義である。
LIBDS という DS は、これら FILEDSPGMDS から成る DS であり
二重構造化された DS である。

このように DS を二重化して再定義できることも覚えておけば複雑なデータの構造も
DS によって管理しやすくなる。

もちろん例によって DS は QUALIFIED を宣言しておけば他のフィールドとは
明確に差別化することができるのでプログラムの品質向上に役に立つので
これも覚えていて欲しい。