次はあるプログラムの演算の一部である。
----------------------------------------------------------------------------- 0001.00 C 1 DO 100 N 4 0 0002.00 C SELECT 0003.00 C WHEN OPT = 'NXT' 0004.00 C SHCODE SETGT SHOHIN 0005.00 C READ SHOHIN 50 0006.00 C WHEN OPT = 'PRV' 0007.00 C SHCODE SETLL SHOHIN 0008.00 C READP SHOHIN 50 0009.00 C N IFGT *ZEROS 0010.00 C N SUBST RESULT:16 SHCODE 0011.00 C ELSE 0012.00 C MOVE *BLANKS SHCODE 0013.00 C END 0014.00 C END 0015.00 C END -----------------------------------------------------------------------------
13 〜 15 行目に END
が3つも重なっている。
よくある話だが構造化プロゴラミングがもてはやされた時代では GOTO
, TAG
命令は使わずに、
IF THEN ELSE END
等で構造化したプログラミング・ロジックにすべきであるという手法であった。
ところが END
が多数重なると END
は、どの条件の END
であるのか余計に複雑になってしまい
混乱を生じるものである。
次のソースを見て欲しい。
------------------------------------------------------------------------------------------- 0001.00 C 1 DO 100 N 4 0 0002.00 C SELECT 0003.00 C WHEN OPT = 'NXT' 0004.00 C SHCODE SETGT SHOHIN 0005.00 C READ SHOHIN 50 0006.00 C WHEN OPT = 'PRV' 0007.00 C SHCODE SETLL SHOHIN 0008.00 C READP SHOHIN 50 0009.00 C N IFGT *ZEROS 0010.00 C N SUBST RESULT:16 SHCODE 0011.00 C ELSE 0012.00 C MOVE *BLANKS SHCODE 0013.00 C ENDIF 0014.00 C ENDSL 0015.00 C ENDDO -------------------------------------------------------------------------------------------
同じ END
であっても ENDIF
, ENDSL
, ENDDO
というように識別して記述しておけば
その END
は、どの命令に対応する END
であるのかが一目瞭然となって修正のときや
フローを追いかけるときにも明確でわかりやすいものとなる。
同じ END
でも、ほんの少しの工夫でわかりやすいプログラム・ソースとなる。