[解決済み] 関数が長すぎる場合とは?[クローズド]
2022-05-14 03:21:47
質問
35行、55行、100行、300行?いつからバラバラにすればいい?私は60行(コメントを含む)の関数を持っていて、それを分割することを考えていたので、私は尋ねています。
long_function(){ ... }
になります。
small_function_1(){...}
small_function_2(){...}
small_function_3(){...}
関数はlong_function以外では使わない、関数を小さくすると関数の呼び出しが多くなる、など。
どんな時に関数を小さく分解するのでしょうか?なぜですか?
- メソッドは論理的なことを1つだけ行うべき(機能性について考える)
- メソッドを一文で説明できなければならない
- ディスプレイの高さに収まること
- 不必要なオーバーヘッド(当たり前のことを指摘するコメント...)を避ける。
- ユニットテストは小さな論理関数のために容易である
- 関数の一部が他のクラスやメソッドで再利用可能かどうかをチェックします。
- 過度のクラス間結合を避ける
- 深くネストされた制御構造を避ける。
回答してくれたみなさん、ありがとうございました。 リストを編集して、正解に投票してください。)
私は今、これらのアイデアを念頭に置いてリファクタリングしています :)
どのように解決するのですか?
本当に厳密なルールはありません。一般的に、私はメソッドが 1 つのことを行うだけであることを好みます。したがって、データを取得し、そのデータで何かを行い、それをディスクに書き込むのであれば、取得と書き込みを別々のメソッドに分割し、私の "main" メソッドは "doing something" を含むだけにしています。
その "doing something" はまだかなりの行数になる可能性があるので、行数が使用する正しい指標かどうかはわかりません :)
編集: これは、先週私が仕事場でメールした 1 行のコードです (ポイントを証明するため。習慣にしていることではありませんが :) - 確かに、私のメソッドにこれらの不良少年を 50 ~ 60 行も入れたくはないでしょう :D
return level4 != null ? GetResources().Where(r => (r.Level2 == (int)level2) && (r.Level3 == (int)level3) && (r.Level4 == (int)level4)).ToList() : level3 != null ? GetResources().Where(r => (r.Level2 == (int)level2) && (r.Level3 == (int)level3)).ToList() : level2 != null ? GetResources().Where(r => (r.Level2 == (int)level2)).ToList() : GetAllResourceList();
関連
-
[解決済み] MATLAB関数におけるオプションの引数
-
[解決済み] MATLABを使用して、ステップ入力または単位ランプに対する閉ループシステムの応答をプロットしてください。
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] Bash関数にパラメータを渡す
-
[解決済み] 関数名を文字列として取得するには?
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
-
[解決済み】C言語の「static」関数とは?
-
[解決済み】Luaの.と:の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MATLAB関数におけるオプションの引数
-
[解決済み] Linuxにおけるoutb()関数呼び出しとは?
-
[解決済み] Haskellでfilter関数を使うにはどうしたらいいですか?
-
[解決済み] オプションの呼び出し変数を持つ関数を作成する
-
[解決済み] MATLABを使用して、ステップ入力または単位ランプに対する閉ループシステムの応答をプロットしてください。
-
[解決済み] "パラメータ "と "引数 "の比較【重複
-
[解決済み】関数定義にジャンプする
-
[解決済み】「関数」と「プロシージャ」の違いは何ですか?
-
[解決済み] どのように私はSwiftで完了ハンドラを持つ関数を作成することができましたか?
-
[解決済み] バリューレシーバー vs. ポインターレシーバー