5行のメソッドと500行のメソッド

JavaWorldに「5行のメソッドと500行のメソッドは5行のメソッドの方がバグが少ない」とか書いてあったけど、そりゃあたりまえだな、と思った。処理が少ないんだもん。
500行のメソッドを5行のメソッドに分割したなら話は別。
500行のメソッドに単純な重複がないとしたら、このメソッドを5行のメソッドに分割するには100+20+4+1の合計で125個のメソッドが必要になる。それで、「ひとつのメソッドに5行しかないからわかりやすくバグも少ないしメンテナンスしやすい」とか言う人がいたら、そんな人は今度の選挙で公認しない。


長いメソッドをいくつかのメソッドに単純に小分けにすることは、コードが見やすくなるとも見にくくなるとも思わない。部分的に見やすくなるかもしれないけど全体的な流れという点では見にくくなる。各処理のボリューム感もつかみにくくなる。
複雑な処理の場合、特に、複数の状態を持つ大きなループの場合、メソッド分割のためには状態の受け渡しやメソッド横断スコープの変数が必要になるので、ロジックとして複雑さが増すこともある。CGのレンダリングやら式のパースとか。いままでの経験からいうと業務処理は分割しやすい傾向があるけど科学的な処理は分割しにくい傾向がある*1
個人的には、メソッドが長いからという理由だけで複数のメソッドに小分けにすることは好きではない。


長い処理を短く分けることで部分ごとにテストしやすくするというのは賛成。処理の本質的ではない部分を抜き出して見通しを立てやすくするのも賛成。というか、短くすること以外に目的があるなら賛成。
メソッドが長いからという理由だけで短く分割することは嫌い。
というか、長い長い3画面くらいスクロールするメソッド大好き。
もちろん、無駄がない(と自分で思える)ことは大前提。無駄のあるコードは評価の対象ではない。
長い長い3画面くらいスクロールする無駄のないメソッド大好き。

*1:さらにいうと科学的な処理にはテストも含めてソフトウェア工学がかなり適用しにくい