アカウント名:
パスワード:
炎上していたプロジェクトだったわけではないのですが、途中参加したプロジェクトで「君の作ったメソッドはどれもこれも機能が単一すぎる」と言われました。どういう事だろう?と思って指摘した人に尋ねたところ、色々な機能がてんこ盛りになった単一のメソッド(決して各々のメソッドを呼び出しているわけではない)メソッドのソースを見せられながら「こういう関数を作っておけばこの関数さえ使えば全部に対応出来るでしょ」と教えられました。
あながち間違いではないのか? とも当時は思いましたが未だに納得できません。# 1メソッド・1機能というのが必ずしも正義ではないとは思いますが、1メソッドで全部やっちゃうっておかしいよね
> 1メソッドで全部やっちゃう
メソッドにする必要ってあるの???
行数を稼げます。
#クレバーなコードよりも、可読性が悪くて大規模なコードのほうがお金になるんです。
ケースバイケースだなぁ。イメージを描画する場合、ファイル名を渡すだけで自分自身に描画までしてしまうメソッドはあってもいい。当然、そのメソッドを構成する各要素も、それぞれ個別のメソッドになっているべきだけれど。
1メソッドで全部やるってことは
methodAll( int flag , ....) { switch( flag ) { case 1: method1(....); brek; case 2: method1(....); brek; case 3: method1(....); brek; case 4: method1(....); brek; .... case 10: method1(....); default: /* エラー処理 */ }}
みたいになってるだけということを理解してない故の発言かも。
呼び出しもとがmethod1の機能を呼び出すのが目的なら、methodALL()を呼ぶよりmethod1()を呼び出した方が安全確実。
レガシーコードばっかり書いてるとそういう思考になるんだな
ルールじゃないけど、昔引き継いだあるVBのプログラム、画面パーツが全部コントロール配列になっていて、当然イベントハンドラはひとつだけ、その中で
if( Index = 0 )then...数百行elseif( Index = 1 )then...数百行elseif( ...
相互に何の関係も無いコードがひとつのサブルーチンに全部収まってるのを見たときは目がくらみました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人
このメソッドには●●の機能しかないじゃないか! (スコア:0)
炎上していたプロジェクトだったわけではないのですが、途中参加したプロジェクトで
「君の作ったメソッドはどれもこれも機能が単一すぎる」と言われました。
どういう事だろう?と思って指摘した人に尋ねたところ、色々な機能がてんこ盛りになった
単一のメソッド(決して各々のメソッドを呼び出しているわけではない)メソッドのソースを見せられながら
「こういう関数を作っておけばこの関数さえ使えば全部に対応出来るでしょ」と教えられました。
あながち間違いではないのか? とも当時は思いましたが未だに納得できません。
# 1メソッド・1機能というのが必ずしも正義ではないとは思いますが、1メソッドで全部やっちゃうっておかしいよね
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
> 1メソッドで全部やっちゃう
メソッドにする必要ってあるの???
Re: (スコア:0)
行数を稼げます。
#クレバーなコードよりも、可読性が悪くて大規模なコードのほうがお金になるんです。
Re: (スコア:0)
ケースバイケースだなぁ。
イメージを描画する場合、ファイル名を渡すだけで自分自身に描画までしてしまうメソッドはあってもいい。
当然、そのメソッドを構成する各要素も、それぞれ個別のメソッドになっているべきだけれど。
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
私もメソッドはシンプルが良いと思います。
てんこ盛りなメソッドの良くないところは以下の3点かと。
1. 複雑ゆえに保守性が低い。
2. 再利用性が低い。
3. 遅い。
2については, パラメータが多く(推測), 気軽に呼び出すことが大変だから。
従って, 他のメソッドからは使いづらい。
また, 使っても3より遅いから全体として速度も落ちる。
あるいは, てんこ盛りメソッドの処理の途中で得られる結果が
欲しい場合もあるかも知れないのに, それを得る方法はない。
シンプルなメソッドを組み合わせて使うほうが, 全体として,
最終的に, より複雑な処理を効率よく実装できるものと思っています。
もちろん, 程度っつーものはあって, fopenなんかが
読み取り用, 書き込み用, 追加用で別々の名前に
なっていたら, ちょっと辟易する... かも。
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
1メソッドで全部やるってことは
methodAll( int flag , ....) {
switch( flag ) {
case 1: method1(....); brek;
case 2: method1(....); brek;
case 3: method1(....); brek;
case 4: method1(....); brek;
....
case 10: method1(....);
default: /* エラー処理 */
}
}
みたいになってるだけということを理解してない故の発言かも。
呼び出しもとがmethod1の機能を呼び出すのが目的なら、methodALL()を
呼ぶよりmethod1()を呼び出した方が安全確実。
Re:このメソッドには●●の機能しかないじゃないか! (スコア:1)
サービス層のメソッドは使用者に豊富な機能を提供して便利であることが望ましい。
みたいな話ではないのかな?
Re: (スコア:0)
レガシーコードばっかり書いてるとそういう思考になるんだな
Re: (スコア:0)
ルールじゃないけど、昔引き継いだあるVBのプログラム、画面パーツが全部コントロール配列になっていて、当然イベントハンドラはひとつだけ、その中で
if( Index = 0 )then
...数百行
elseif( Index = 1 )then
...数百行
elseif( ...
相互に何の関係も無いコードがひとつのサブルーチンに全部収まってるのを見たときは目がくらみました。