メソッドは20行以内に収めましょう
なんてコーディング規約がある。
少なすぎない?って話もあるだろうけど、所詮はコーディング規約なので、20行を超えても害はない。
じゃぁこの20行というのはどこからきたのか。
コンピュータにとっては行数などどうでもいい。メソッド分割されてあちこちに飛ばされるオーバーヘッドだけをみればむしろマイナス。なので行数を納めるのは人間のため。
人間にとっての20行というのは「1画面に収まる範囲」ということ。いやもっと入るよと言う意見もあるかもしれないけど、100行ってわけにはいかず、せいぜい30行程度でしょう。
じゃぁもう意思をしてて無理やりメソッドを分割すればいいんだよねと分けても、変数のスコープがメソッドの外にあったら「1画面で収まる」にはならない。グローバル変数がダメだと言われてるのは、その変数がどこで何されてるかが分からないから。メソッドを分割するだけではなく変数のスコープも1画面に収まっていてほしい。
だからグローバル変数はもちろんのこと、インスタンス変数もむやみに使わない方がいい。DBコネクションのように「プログラム全体を通じて覚えていてほしいもの」だけがスコープの外にあるべき。
メソッドだけではなくループを書くときもループの外に変数があると、分かりづらいから配列を変換するだけならmapを使う方が、変数のスコープが一つ減る。ループの中で何かを集計する場合でも集計済の変数を外で定義するのとスコープが広くなりすぎるので、すべて再帰でやりましょうという主義もある。
すべて再帰でかけばループの変数のスコープを閉じ込めることはできるんだけど、「メソッドが20行以内」に収まっていれば、どうせ1画面に収まってるのでありがたみは少ない。