回答箱 No.44-3:   プログラムを短くしたい。

   ◆ 質問箱 No.44  質問者:   罍 昭夫   1996年12月 179号 P.38
      ◆ 質問箱 目次へ
No.44-3    プログラムを短くしたい。 回答者
  入川 精二
1997年01月
180号 P.21
  質問箱 No.44(1996年12月号)の回答-3

   プログラムを短くすると、後から見てわかりやすくなるときもあれば、非常に難解になってしまう場合もあります。なりふりかまわず短くしたいときは別として、わかりやすさを維持することも大事な要素です。
   さて、罍さんの質問にあるように、'INPUT'文または'ACCEPT'文で入力した後その数値にしたがって分岐するケースはかなり頻繁に使われます。
   例えば入力データが1〜9の数値の場合、最も簡単な分岐は、
                 INPUT V1;
                 GOTO $#%V1;
           $#1:  ..........
           $#2:  ..........
           ....
 のようにIF文を全く使わない方法です。(入力内容のチェックは必要です)
   それでも、飛び先は、この場合最低9行必要です。罍さんの質問に限定して考えれば、V3に格納する文字列はすべて2文字ですから、プログラムの25〜29行は短くなりそうです。
   15行目から29行目までは次のように短縮することが出来ます。

 15 $3:    LET V2=[4,@ク];
 16 $INP: INPUT [53,03],V2,U(%(STRING%(78,01))/AS/RY/P//CY);
 17       IF ERR(0)=55 THEN STOP;IF V2="" THEN GOTO $INP;
 18       IF INSTR(1,"12345",V2)=0 THEN GOTO $INP;
 19$区分: LET V3=KMID$("新規継続脱退途中年頭",VAL(V2)*2-1,2);
 20$表示: DISP ........
   ここでは「分岐」は使っていません。
   17・18行目は入力結果のチェックです。
   19行目でやっていることは次のとおりです。
      "新規継続脱退途中年頭”という文字列から文字を取り出す。
   取り出し位置は、[(入力した数字) X 2 - 1]桁目から、文字数は2文字。
   取り出した文字列をV3に格納する。
   プログラムにはなるべく各行ごとに/*〜〜*/の形式で説明のコメントを書込んでおくとよいでしょう。
戻る