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に格納する。
プログラムにはなるべく各行ごとに/*〜〜*/の形式で説明のコメントを書込んでおくとよいでしょう。
|
| |