🧩今日の学び
・EXIT PERFORM CYCLEは「ループを終わらせず、今の1周だけを無かったことにする」制御命令
・EXIT PERFORMが撤退なら、CYCLEは見送り。兄弟だが役割は明確に違う
・IFのネストやGO TO地獄を避けるために用意された、現場向けの例外処理がCYCLEだ
係)よし、次行くぞ。
な)えー、休みましょうよー。
6月は恵みの雨に感謝の日が必要ですって。これから夏に向かって準備の日必要ですって。過ぎゆく春にさよならの日が必要ですって!
係)単純に「さようならの日」でいいぞ。一回限りだが。
な)いや、人は何度でもやり直せるんですよ!終わらない旅ですよ!
係)さようなら言ってたのお前だろうが!
EXIT PERFORM CYCLEの正体:ループは終わらせず「今週だけ休む」
係)今回はEXIT PERFORM CYCLEだ。
ここはな、分かったつもりで一番事故る場所だからな、丁寧にいくぞ。
な)って、なんすかこれ?
EXIT PERFORMは、ルーピング抜けるやつですよね?
それにCYCLEがくっついた⋯ということは、ルーピングを抜けるサイクル?
係)そう。
EXIT PERFORM は「ループを終わらせる」。EXIT PERFORM CYCLEはその兄弟だ。
係)まず結論だ。
EXIT PERFORM CYCLE は「この周回をスキップして、次の周へ行け」
ということだ。
な)え、ルーピングは終わらないんすか?
係)終わらない。続く。
EXIT PERFORM→ ループ終了(外へ出る)
EXIT PERFORM CYCLE→ 今の1周だけ中断(次の周へ)
実行結果で理解する:抜けるのか、飛ばすのか
参考のコードだ。読んでみろ。
【EXIT PERFORM の例】
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
IF I = 3
EXIT PERFORM
END-IF
DISPLAY I
END-PERFORM
な)えーと、1から始まって、1ずつ増えていって、5まで回すってルーピングで、IFは3のときの条件なので、「Iが1」のときはEND-IFでIF抜けてからのDISPLAYで表示となりながら、PERFORM VARYINGに戻って、再度1足して2になって再度回すも同じ流れ。
3になって再度回すもIFに捕まるので、EXIT PERFORMで抜けちゃうので、PERFORM VARYINGが終了となるので結果はこれっすね。
1
2
係)本当に理解してたんだな…
な)なんで嘘言うんすか!
係)悪かったよ。FからE-ぐらいで考えておくよ。
な)やった!
係)いや、喜ぶなよ⋯って、お前も突っ込めよ⋯
EXIT PERFORM CYCLE の例
係)次はこれだ。
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
IF I = 3
EXIT PERFORM CYCLE
END-IF
DISPLAY I
END-PERFORM
な)えーと、見た目はあんま変わらないんすね。
EXIT PERFORMがEXIT PERFORM CYCLEになっただけっすかね。
んで、同じように、1から入ってみて、1と2はIFにかからないので、IF外を進むと。
ルーピングして、DISPLAYで1と2を表示すると。
んでIが3になったら、IFに捕まってEXIT PERFORM CYCLEはそのときだけ抜かして、ルーピングが継続になるってことでしょ?おじいちゃんの言い方だと。
係)誰がおじいちゃんだよ!
な)ひとりごとを聞かないでくださいよー。もうー。
係)せめて口に出すなよ!
な)それだと、今日フルコースのディナー行くってひとりごと言って、行かなかったから詐欺だって言ってるようなもんですよ。
係)は…?
な)んでー、3だけ抜けて、さらに45と進んでいってDISPLAYされると。
係)いや俺の疑問を無視すんなよ…。ま、まぁ集中しているからいいか…。
な)んでI=6になったら、UNTILに引っかかるから、それでEND-PERFORMでおしまいっと。世界の終わりっと、ドラゴナイっと。
なので、実行結果はこうっすね!
1
2
4
5
なぜCYCLEが必要か:GO TOとIF地獄を回避するため
係)やってみてとわかったと思うが、
CYCLE = 今回は無かったことにする
ということだ。
な)あれ?EXIT PERFORM CYCLE って、ループの先頭に戻ってんすかね?
係)違うな。正確にはこうだ。
PERFORMの制御部に戻るが、PARAGRAPH の先頭に戻るわけじゃない。
係)こういったとき、
データ1件ずつ処理
条件に合わない行がある
でも全体処理は続けたい
GO TOで飛ばすは地獄。
IFでネスト増やすと読めない
となってしまうので、EXIT PERFORM CYCLEが使われるってわけだ。
なお、EXIT PERFORMとの使い分けを考えると、
全部やめたい → EXIT PERFORM
今回はやらない → EXIT PERFORM CYCLE
って覚えておけ。
ただし、これも覚えておけ。
- CYCLE は 例外処理
- 多用しない
- 1ループにつき最大1箇所
- コメントがあると親切
係)EXIT PERFORM CYCLE を理解したら、もうGO TOは要らないぞ。
・抜ける → EXIT PERFORM
・飛ばす → EXIT PERFORM CYCLE
これで全部表現できるからな。
おむすび
な)GO TOさん引退ですね⋯お疲れ様でした。
係)お前、それ俺に言ってないか?
係)やだなー、係長にはいつまでもいてくれないとですよ!よぼよぼになっても,俺のために来てくださいね!
あ、でも、交通費は自腹でお願いしますね!
係)なんの心配してんだよ!
な)あ、昼食代もです。あと、残業代は出ないので。
係)どこまで搾取する気だよ…
係長のワンポイント
EXIT PERFORM CYCLE は「ループを終わらせず、今の1周だけ無かったことにする」命令だ。
EXIT PERFORM が“撤退”、CYCLE は“今回は見送り”──役割ははっきり違う。
制御は段落の先頭ではなく、PERFORM の制御部に戻るのがポイントだ。
IF で包むと読めなくなり、GO TO は地獄を見る──だから CYCLE が用意された。
全部やめるか、今週だけ休むか──その判断を書けるのが EXIT PERFORM CYCLE だ。

コメント