🧩今日の学び
・EXIT FUNCTIONを使うなら、RETURN-VALUEは必ず確定させてから抜ける。
・未定義値は安全ではなく「たまたま動いているだけ」だと理解した。
・値を決めてから抜ける設計が、FUNCTIONの信頼性を支えている。
なるお)なんか、いきなりまとめ出しちゃってましたが、係長こういってましたよね?
途中 EXIT するなら
デフォルト値を入れる
もしくは異常値を返す
MOVE -1 TO RETURN-VALUE
EXIT FUNCTION
という感じだ。
ってドヤ顔してましたよね。
お前にはわかんねーだろうな。
俺がいないと駄目なんだろうなー感の人を蔑んだ顔してましたけど。
係長)そんな顔するかよ!
EXIT FUNCTIONの基本思想:途中で終わるなら値を決めろ
な)いや、係長の日常フェイスはいいんですけど、だったら最初のコードの例もデフォルト値とか異常値を設定しておく必要はあるってことっすか?
係長のコード例
FUNCTION-ID. ADD-ONE.
IF X < 0
EXIT FUNCTION
END-IF
MOVE X + 1 TO RETURN-VALUE
END FUNCTION.
このコードで、例えば…こんな感じ?
FUNCTION-ID. ADD-ONE.
IF X < 0
MOVE 1 TO RETURN-VALUE
EXIT FUNCTION
END-IF
MOVE X + 1 TO RETURN-VALUE
END FUNCTION.
係)日常顔ってどんなだよ。
でも、ま、いいところに気づいたな。
結論から言うと――その書き方で「OK」だ。
しかも、意図が読み取れる良い例になってる。
な)え!?マジすか!
ちょっと気づいたぐらいで、そんなに大げさに称賛してくれなくてもいいんですよ!いつものことですから〜 (テレテレ)
係)落ち着けよ。いちいちうるさいからな。
な)え!?
係)この場合、デフォルト値は「必要か?」ではなく、「もう入っている」状態になっている。
だから安全だってことだ。何が安全なのかを分解していくぞ。
な)は?安全?全く安い?安物買いの100万円失い?
係)そういう分解じゃねーからな!
まったく、現実的数字すぎるだろ…。
パターン①:X < 0 のとき
MOVE 1 TO RETURN-VALUE
EXIT FUNCTION
RETURN-VALUE:1EXIT FUNCTION:即終了- 呼び出し側が受け取る値:1
未定義にならない
「異常時は 1 を返す」という仕様がコードに書いてある
パターン②:X >= 0 のとき
MOVE X + 1 TO RETURN-VALUE
RETURN-VALUE:X + 1- 正常終了
これも当然OKだ。
② 良い例と悪い例:RETURN-VALUEが未定義になる瞬間
じゃあ「デフォルト値が必要」って何なのかだが、こういうケースの話になる
IF X < 0
EXIT FUNCTION
END-IF
この書き方だと、
RETURN-VALUEに何も入れてないEXIT FUNCTIONで即終了- 戻り値は 未定義(処理系依存)
これが危険だということだ。
だから正しい考え方は、
EXIT FUNCTIONを使うなら、その前に必ず「返す値」を確定させろ。
ということだ。
デフォルト値・異常値の本質:名前より“決めてある”こと
係)正常値、異常値、デフォルト値など、言葉はどれでもいい。
「決めてある」ことが大事だってことだ。
◯RETURN-VALUE を必ずセットしてからEXIT FUNCTION
◯ 途中EXITするなら異常値を明示
×RETURN-VALUE 未設定でEXIT FUNCTION
な)ふむぅ。
でも、未定義だと0とかが返されるとかないんすか?だったら、別に定義しておく必要なんてないような?
係)嫌な質問してくるようになってきたな…
でもこういうことは避けちゃダメだ。「未定義はどうなるか」をちゃんと知っておくべきだな。
おむすび
な)係長エヴァ好きだったんですね?シンエヴァどう思いました?
係)はぁ?何いってんだお前?
な)避けちゃダメだって、シンジ君のセリフのパロですよね?
係)んなわけあるか!なんでここでエヴァンゲリヲンの話するんだよ!
な)係長ちゃんとエヴァとかゲリヲンとか分けてるんすね。
ちゃんと新劇版もチェックしてるんすね!
係)おじさんがエヴァが好きで悪いか!
な)あはー!エヴァ語りしましょうよー!
係)い・や・だ!
な)えーなんでですかー。
係)お前にエヴァで、上から物言われるのだけは許せん!
な)ええ!?なんでエヴァだけ!?
係長のワンポイント
EXIT FUNCTIONは「途中で終わる」命令だが、「何を返すか」を決めずに抜けてはいけない。RETURN-VALUEが未設定のまま終了すると、値は処理系依存になり事故の種になる。
正常値でも異常値でも、返す値が決まっていること自体が安全だ。
名前より大事なのは「コードに仕様が書いてあるか」だ。FUNCTIONは親切に振る舞え──戻り値は黙って決めるな。
コメント