読者です 読者をやめる 読者になる 読者になる

argius note

プログラミング関連

開発しています



PMDのちょっと困ったルール

Java Eclipse

PMDは良いツールだと思います。しかし、「これはちょっと」というルールも少なくありません。
一番気になったのは"OnlyOneReturn"ルール。簡単に言うと、「returnは一箇所だけにしよう」というルールです。
このルールに従うためには、戻り値のために不要なローカル変数を宣言したり、無駄なelseブロックを生んだりと、良い所が思いつきません。何の為のルールなのかがさっぱり分からず悩んでしまいました。
さすがにこれは異論を唱える人も多いだろうと思って検索してみましたが、それほどでもなく、これに言及しているものはあまり目立っては見つかりませんでした。
日本語訳は適当に流してください。まずは、「10のバッド・ルール」の#8。

OnlyOneReturn: I think it's clearer to exit early. It reduces the amount of things to think about below the exit.

Bad PMD Rules

メソッドを早く抜けてしまえば、それについてそれ以降で考える必要がなくなるから、ってことでしょうか。他の挙げられたルールについても、同意せざるを得ません。

次は、「"OnlyOneReturn"は有害だと思う」。java.lang.Integer#toString()の引用の後。

We have a special case, and it's dealt with right at the beginning of the method. If we hadn't done that, we would need to slap a big else block around the remainder of the code, as well as introduce a temporary variable, e.g. result, to hold the return value that we then return as the last statement of the method.

OnlyOneReturn Considered Harmful

超意訳ですが、「例外的な場合はメソッドの頭でさっさと抜けてしまう。そうしないと、無駄にでかいelseブロックが必要になったり、戻り値を入れるためのresultとかいう名前の一時変数が必要になったりする。」と。やっぱりそう思いますよね。

最後に、日本の方で。

これを on にすると、処理の途中で条件に適合しないのをどんどんふるい落として、最後に残ったのだけナニする、というパターンの処理がかけない。

PMD で無効にするオプション

勝ち残りor負け残りパターンでしたっけ?