- - PR -
メソッドの量(行数)についてなのですが
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-01 16:20
unibon です。こんにちわ。
昔から疑問に思っているのですが、『1メソッドが1画面に収まるようにすると良い』、 というのはとても良く聞きますが、なぜなのでしょうか。 というのも、1画面に収まるとエディタ上でスクロールしなくても見ることができて、 エディタ上で見やすいから良い、という理由なのか、 それとも、1画面の文字数や行数が、 たまたま理解しやすいコード量の上限と一致しているだけであるのか、 の2つが考えられるからです。 前者ならば、時代と共に変化する環境、 特にディスプレイの大画面化・高解像度化につれて コード量の許容値が増加しますが、 後者ならば、時代によらず不変です(80桁×25行がひとつの目安かも)。 それとも、そもそも『1メソッドが1画面に収まるようにすると良い』というのが 虚構なのでしょうか。 | ||||||||||||
|
投稿日時: 2003-07-01 16:21
こんにちわ。 確かにメソッド、クラスの分割は設計的に美しいと思います。 しかし、たまに分割しすぎ?のものもあります。 そういうものは一つの処理フローを追うのにやたら時間がかかります。 ・ん?ここで違うメソッド行ってるな、そのメソッドどこだ? ・お、ここでこういうことやってるわけね。ふむふむ ・おや、また違うとこ呼んでんな ・ん?今度は孫メソッドまで行ってるぞ。 ・あ?今度は違うクラスを参照してんのか?どこだ・・? ・んで、このクラスはまた違うクラスのメソッドを・・ ・んがーーーーー! 設計者からすれば頭の中にあるのでわかりやすいのでしょうが 設計をわかっていない人間が読むとエディタを何個も起動する ハメになります。 わたしだけ? | ||||||||||||
|
投稿日時: 2003-07-01 17:18
がんも と申します。
私は先日面接を受けた時、 「最大何行のプログラムを作ったことがあるか?」 という質問を受けました。 そういうわけで、議題の 「何行ぐらいのメソッド、クラスを書いたことがありますか?」 とは少し異なるのですが、たまらずに書き込んでしまいます。お許し下さい。 私が思うに、大事なのは プログラム全体を見た時、システムの目的、実態を、簡潔に表現していて 理にかなった機能分割がされているコード。 である事だと思います。 ご友人の方が面接されたところでは、理にかなった機能分割をした結果、 どうしても 「1000から2000行があたりまえだから」 となったのかもしれませんし、もしかしたらセンスが無いだけなのかもしれません。 私は、開発環境やプログラミング言語に関係なく「理にかなった機能分割」に優れた人や、その様なプログラムを見た時に「かっこいいな」と思いますが、多分今までそれらは、1000-2000行の塊りにはなっていなかったと思います。 やはり、ソースコードの分量も考慮して、機能分割してほしいですからね。 また、どれだけ規模が大きい開発であっても、所詮は地道な機能分割の繰り返しなので、自分自身が「最大何行のProgramを作ったことがあるか?」は気にしたことがありませんでした。 でも、もしだれかが一人で作った巨大ソースが「理にかなった機能分割」で成り立っているのを見たら、「最大何行」の部分で尊敬するんだろうな...。 | ||||||||||||
|
投稿日時: 2003-07-01 19:04
『1メソッドが1画面に収まるようにすると良い』 これについては、別に誰かに言われたわけではないですが、 自然にそう思うようになりました。 自分の場合は主に前者です。さすがに25行を超えるメソッドは山ほどあります。 ただし、後者の理由も十分にありえるでしょう。
これはあるかもしれませんが、 理想は呼び出しているメソッドの内容を読まずとも、 処理内容が推測できるコードを書くことです。 そのためにはメソッド名、クラス名が洗練されていること、 標準APIに習ったインターフェースをしていること、 メソッドが高々100行程度であることなどが重要になります。 これが可能ならば、ひとつのメソッドを読み終えてから、 呼び出されている次のメソッドをトレースするという順序になり、 可読性は大幅に向上します。 ちなみに、ソースのトレースにもEclipseは大活躍します。 メソッドにカーソルを合わせてF3(or Ctrl+クリック)で メソッドを開くことができます。Alt+←で前の表示箇所に 戻ることもできますので、ウェブブラウザのようにソースを 眺めることができます。 蛇足ですが、 > エディタを何個も起動するハメになります。 これから察するにエディタは秀丸あたりをお使いですか? 私はEclipse以前は稀杜氏のJCPadを使用してコーディングしていました。 タブエディタで、javaのコンパイル・実行が一発ででき、便利なGrepやファイラ機能を 備えていて、Grepやコンパイルエラーのメッセージから該当箇所にジャンプすること ができます。ちょっと工夫すればAntと連携させて使うことも可能です。 エディタ派の人やIDEを環境の問題で使えない人にはぜひお勧めです。 | ||||||||||||
|
投稿日時: 2003-07-07 13:01
unibon です。こんにちわ。
チャチャですが、処理フローを追うと時間がかかるのも当然のような気もします。 『このクラスの main メソッドはなんて複雑なんだ。追っても追ってもキリがないぞ。』 となりかねません。 Wataさんがご指摘のように処理内容が推測できるコードにしておけば、 追っていく途中で打ち切ることができるので、追いやすいですよね。
やはり Eclipse などの「ブラウザ」があると、手間が格段に違いますね。 クラスを静的に眺める場合でも、実行時の挙動を眺める場合でも、 あるのとないのとでは負荷が10倍くらいは違ってきそうだと思います。 | ||||||||||||
