Python

3. RPG から Pythonへの進化

ILE-RPG の進化とさらにPythonへの進化を解説する。
ILE-RPGで次のような処理を記述するとする。
_

固定式記述のILE-RPG

0005.00 C                   IF        OBJTYP = '*FILE     '                        OBJTYP  
0006.00 C                   IF        OBJATR = 'PF        ' OR                       PF,LF 
0007.00 C                             OBJATR = 'LF'                                        
0008.00 C                   EVAL      OBJ = 'DTABASE   '                                   
0009.00 C                   ELSE                                                     DSPF  
0010.00 C                   EVAL      OBJ = 'DSPF      '                                   
0011.00 C                   ENDIF                                                          
0012.00 C                   ENDIF                                                  OBJTYP  

[解説]

インデント(=段落)がないので構造化されていたとしても
非常に見にくいしわかりにくい記述になっている。
これをフリー・フォーマットで書きなおすと

0013.00  /FREE                                                       
0014.00     IF OBJTYP = '*FILE     ';                                
0015.00        IF OBJATR = 'PF        ' OR OBJATR = 'LF        ';    
0016.00          OBJ = 'DTABASE   ';                                 
0017.00        ELSE;                                                 
0018.00          OBJ = 'DSPF      ';                                 
0019.00        ENDIF;                                                
0020.00     ENDIF;                                                   
0021.00  /END-FREE                                                   

[解説]

となり幾分か見やすくわかりやすくなる。
    同じように C言語で記述すると

0010.00 /* C/400 )*/                                                                                        
0011.00   if(strncmp(objtype, "*FILE     ", 10) == 0){/*FILE*/                                              
0012.00      if(strncmp(objatr, "PF        ", 10) == 0 || strncmp(objatr, "LF        ", 10) == 0){/*PF, LF*/
0013.00         strcpy(pbj, "DTABASE   ");                                                                  
0014.00      }/*PF,LF*/                                                                                     
0015.00      else`/*DSPF*/                                                                                  
0016.00         strcpy(pbj, "DSPF      ");                                                                  
0017.00      }/*DSPF*/                                                                                      
0018.00   }/*FILE*/                                                                                                                                      

[解説]

となり C言語では比較が = ではなく == となる。
また = で単純に置き換えるのではなく strcpyや memcpy を使う。
変数が数字であるときは = で置き換えることができる。
ILE-RPGのフリー・フォーマットや C言語、Javaでも
このようにインデント(=段落)で記述することができるが
それはできるということであってあくまでも書き手(=プログラマー)の
任意である。

0013.00  /FREE 
0014.00     IF OBJTYP = '*FILE     ';                                
0015.00     IF OBJATR = 'PF        ' OR OBJATR = 'LF        ';    
0016.00      OBJ = 'DTABASE   ';                                 
0017.00       ELSE;                                                 
0018.00      OBJ = 'DSPF      ';                                 
0019.00     ENDIF;                                                
0020.00     ENDIF;  
0021.00  /END-FREE                                                

と書くこともできるのでインデント(=段落)は文法上の必須ではない。
Python になるとインデント(=段落)は必須であり文法上のものとして
解釈されるようになる。

0033.00  * Python                                                   
0034.00     if OBJTYP == '*FILE     '                              
0035.00        if OBJATR == 'PF        ' or OBJATR == 'LF        ' 
0036.00          OBJ = 'DTABASE   '                               
0037.00        else;                                                
0038.00          OBJ = 'DSPF   
0039.00     


_

[解説]

これがPythonによる記述である。
C言語よりもILE-RPGのフリー・フォーマットに近く
インデント(=段落)は必須である。
ただし ifに対する ENDは無い。
インデントの切れ目がIFの終わりを表している。
または ”’ によってインデン(IF)の強制終了を表す。
このように見てみると
ILE-RPGの固定ファーマットは一番わかりにくく C言語はその次である。
しかしILE-RPGのフリー・フォーマットにすると C言語よりわかりやすくなる。
さらにPythonにするとそのILE-RPGのフリー・フォーマットより
さらにやさしくわかりやすいものとなる。
インデント(=段落)を意識的に使うことによって Pythonの記述も
わかりやすくなる。