C に記述標準を設けてバグの入りにくいコードを書けるようにという志で作られた MISRA C ですが、 関数の末尾以外の return を禁止するという誰得ルールを筆頭に使い物にならない制約が多すぎます。 役に立つところといえば、これをそのまま採用するところの技術力は信用できないという判断材料になることぐらい。
returnの場合は様々な要因が絡むからアレだけど, 似た例ではif文とif句の違いがあります. if(a){
x = A; }else{
x = B; } とあるものは, x = if(a) A else B あるいは, x = a?A:B; の方が大抵の場合は見通しが良いですよね. 文頭から, 「あ, xになんか代入すんだな」っていうことがわかります.
MISRA C という失敗 (スコア:1)
C に記述標準を設けてバグの入りにくいコードを書けるようにという志で作られた MISRA C ですが、
関数の末尾以外の return を禁止するという誰得ルールを筆頭に使い物にならない制約が多すぎます。
役に立つところといえば、これをそのまま採用するところの技術力は信用できないという判断材料になることぐらい。
Re: (スコア:1, すばらしい洞察)
> 関数の末尾以外の return を禁止する
なぜ禁止なのかわからない人にコードは書かせたくないなあ
Re:MISRA C という失敗 (スコア:0)
なんだろう?可読性がよくなる訳じゃないし。
末尾最適化されやすくなる(かもしれない)くらいしか思い浮かばないなあ。
Re:MISRA C という失敗 (スコア:2)
私じゅうあ可読性は上がると思います.
それこそ「山脈のようなコード」でなくても.
returnの場合は様々な要因が絡むからアレだけど,
似た例ではif文とif句の違いがあります.
if(a){
x = A;
}else{
x = B;
}
とあるものは,
x = if(a) A else B
あるいは,
x = a?A:B;
の方が大抵の場合は見通しが良いですよね.
文頭から, 「あ, xになんか代入すんだな」っていうことがわかります.
同じことがreturnの場合にも言えるんじゃない?
関数の最後から見て, 何を返すのかを先に知ることで,
見通しは良くなるんじゃないでしょうか?
ここまでの説明で, returnまでの長さが問題じゃないことはわかると思います.
Re:MISRA C という失敗 (スコア:2)
ごめんなさい, 変なタイポが入りました
# ○私 は : ha
# ×私 じゅうあ: jha
Re:MISRA C という失敗 (スコア:1)
関数の入り口と出口がそれぞれ一箇所に限定できるので、処理手順の流れを正順・逆順追っかけるのが楽になるということでしょうか。しかし、いまなら統合環境では return goto break continue といった処理手順に影響するキーワードは強調表示できるので、 それほど問題にならないような気がします。
Re:MISRA C という失敗 (スコア:1)
そう、こういうのはだいたい昔の親切でない言語や開発環境を想定した規約なんだよね。
実際10年ぐらい前には、巨大メソッドの途中にreturn文があって以降が実は使われないゴミ、とかいう酷いプログラムを見かけたこともある。
なので、そういう時代は出口を一か所にしなさいという主張にも、その結果として巨大なif文やらが作られてしまうことが多々あるものの、それでも一定の価値があった。
でも今はJavaなんかだとそもそもそういうのは言語自体でエラーとして検知してくれるし、何より一つ一つのメソッドを小さく作るべき、って思想も浸透してきてる(と思う)ので、この規約は可読性を下げるだけの厄介者でしかない。
Re: (スコア:0)
デバッグか何かで、ツールで関数末尾に処理を自動挿入するとかは?
人間は一度に少しの事しか覚えてられないので、この場合はこれで終わりということが
明確に分かる、途中returnには意味があると思うけどなあ。
これを禁止する人は、例外がある言語でも例外は使えないんだろうか?
Re: (スコア:0)
むしろ例外のない環境に過剰適応した結果「途中returnなんて解放漏れが発生する! 論外だ!」とか吹き上がっちゃってるんじゃね?
Re: (スコア:0)
なるほど解放漏れかー。その発想はもう忘却の彼方だったなあ。
これはどうも、goto禁止令と同種の制約っぽいな。
goto同様、途中returnも解読困難に記述することは可能だから、
そういう手合いには使用を禁止した方が読めるソースになるって事かな。
Re: (スコア:0)
その程度の事でも可読性が下がるような冗長なコードをメンテしているのでしょう
一度製品に載ったコードはなかなか変えられないなんて良くある事です
作り直したくなる気持ちを抑えて障害解決しようと頑張る方々には頭が下がります