- monamour555
- 16292
- 1
- 1
- 0
Jeff Bay氏の言う早期returnの使用と,MISRA-Cの「14.7 R 関数では、関数の最後に唯一の出口がなくてはならない。」は真っ向から衝突する.オブジェクト指向と手続き型との見解の違いだろうか? …それ以外の何かが潜んでいる気がしている(けれど形式化できない).
2012-08-29 14:18:15@monamour555 わたしも突き詰めたら宗教に1票です。関数型ぽくシンプルなメソッド定義にしたいという意図はあるかもしれないですが、C由来のC++ではコーディングルールというか見た目で制約するのは無理そうですし。
2012-08-29 14:37:29.@trapneko jeff Bay氏のルールだと,インデント1段階やelse句禁止で,見た目から縛りかけていますね.それらがあっての早期returnだろうとは思います.
2012-08-29 14:45:10MISRA-Cルール14.7を「関数の出口を1つにしても気持ち悪くないくらいまで関数分割せよ」と暗に主張していると解釈すると,両者の言っていることは割と整合する気もする.
2012-08-29 14:38:22ただ,MISRA-C本が手元にないので記憶曖昧だけれど「関数の出口を1つにしても気持ち悪くないくらいまで関数分割せよ」なんて解説ではなかったように思うので,MISRA屋さんに言わせたら,きっと正解ではない.
2012-08-29 14:50:37@c5h12o51 @monamour555 @monamour555 出口1箇所というのは、資源の解放し忘れとかを予防するためとかであって、そういう目的もなしに教条的に守れというなら宗教ですけど、いきなりそう決め付けるのはどうかと思いますが
2012-08-29 14:49:24確かにリソースリーク予防の観点はありますよね.特にC言語ではリソースリークは起こりがちで致命的. QT @ksmakoto: @c5h12o51 出口1箇所というのは、資源の解放し忘れとかを予防するためとかであって、
2012-08-29 14:52:34まずはリソースリークへの考え方の違いと考えるべきか.MISRA-Cのルール14.x全体を見ると,goto 禁止だけでなく,break や continue に制限がかかったり if-else の後の else を強制したりして,想定外の制御フローの存在を極端に嫌っているし.
2012-08-29 15:00:02ただ,MISRA-Cルール14.x に適合するコードを書こうとすると,たぶんインデントの段数は少なく(STLないので1段は無理としても)なり,関数中のreturn文の数は少なくなる.result変数を持ち歩くコードは可読性悪いから.結局 Jeff Bayの推奨コードに近づく.
2012-08-29 15:08:43