「1メソッドは 50行以内」

twitterで教わった。

1メソッドは 50行以内

まぁこの手の制約のあるところは多いし、それに対してナンセンスだという声もよく聞くんだけど、私はわりとこの手の制約には好意的だったりする。まぁ「再帰禁止」とかはナンセンスだと思うけど。

gdgdいろいろと理由もあるけれど、それらの理由を一言で言うなら、

長文は悪文

ということ。えー、今日のお前が言うなスレはここですw

確かに件の記事のコメントにあるように、「出来る奴がちゃんと書く」という前提に立てば、50が1000でも短期的には問題は出ない。geekならそれが当然だ。でも、そういった能力があったにしても、「50行」の類の制約は意識した方がいい。この「50行」は絶対値としてじゃなくて、要するに1ページだ。だから、まぁ今時なら100行くらいでもいい。1つの論理的なブロック(メソッドや関数の手続きの類)は、

スクロールなしで全体が見渡せる

ということだ。経験的には、スクロールが必要な規模になった時点で、いきなり品質が落ちる。

で、なんでそんなことを言うかと言えば、人間の「脳力」で一番落ちやすいのが、「短期記憶」だからだ。スクロールが必要だということは、つまりは「短期記憶」を働かせなければいけないことになって、大きなブロックは脳力の落ちた時に破綻するので避けようということ。

出来るプログラマは能力と同時にたいてい脳力も高い。だから、読みやすく書いてあれば、長いコードでも難なく読める。でも、そんな脳力の高いプログラマであっても、

  • 徹夜中
  • テンパってる時
  • 歳食った時

なんて時は脳力が下がる。当然ながら、そんな時でもちゃんとコードが読み書き出来ないと困る。となると、脳力が落ちた時のことも考えて、読むのが楽な規模に抑えておくわけだ。

だから、もしあなたの能力が高くて、プログラムが大好きで、自分の書いたコードを将来も見なきゃいけないとか、ずっとプログラムをやっていたいのであれば、論理的なブロックはスクロールしないで済む規模に抑えておくべきだ。

ネストの深さもそうで、出来れば行がはみ出ないようにした方がいい。それは、emacsの普通のモードのように、長い行を折り返してくれるエディタでもそうだ。だから、「2重まで」ではなくてもいいし、そんな小さい制約はナンセンスだと思うけれど、やたらに深くはしない方がいい。

そんなわけで、私は「コードは見た目が重要」であり、縦もネストもあまり深くない「小柄貧乳」なコードにした方が良いと思うわけだ(もちろんおねいさんも小柄貧乳が萌える)。

これに対し、「思考力」のようなものはあまり低下しない。また、比較的長期の記憶も低下しにくいものらしい。だから、再帰を使うとか、効率良いけど難しいアルゴリズムを使うとか、継承の類の深さについては、あまり神経質になる必要はない。「難しいから」という理由では、使える文法の範囲を狭める必要もない。

そういったものはコードの効率を上げ、コードを引き締めてくれる働きがあるので、むしろ積極的に使うべきだ。それが出来ないプログラマには、ストレートに「もっと能力つけろ」と言ってしまっていい。また、そういった能力は身につけておいても、そうそう劣化しないものだ。

まぁそんなわけで、コーディング規約に関してまとめると、「大きさに関する制約は設けるべし」「難しさに関する制約は設けるな」ということ。