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の記述も
わかりやすくなる。