私はこれに関して2つの相反する見解を得ています。いくつかの情報筋によると、メソッド呼び出しを減らすメソッドは少なくすべきだと述べているが、JITに最適化をさせるためには、メソッドを短く書くのが良いという意見もある。C#、長いメソッドまたは短いメソッドを記述していますか?
だからどちらの面が正しいですか?
私はこれに関して2つの相反する見解を得ています。いくつかの情報筋によると、メソッド呼び出しを減らすメソッドは少なくすべきだと述べているが、JITに最適化をさせるためには、メソッドを短く書くのが良いという意見もある。C#、長いメソッドまたは短いメソッドを記述していますか?
だからどちらの面が正しいですか?
実際にメソッド呼び出しを行うオーバーヘッドは、ほとんどすべてのケースで非常に小さいです。問題を再訪する必要がある道路の問題を明確に特定できない限り、心配する必要はありません。
コードがシンプルで読みやすく、モジュール化され、メンテナンス可能で、変更可能であることがずっと重要です。メソッドは1つのことを行うだけで、他のルーチンにサブ物を委譲する必要があります。これは、あなたの方法が可能な限り短くなければならないことを意味しますが、短くはありません。コンパイラやランタイムを超越しようとするよりも、エラーやバグが発生しにくいコードを簡単に作成できるため、パフォーマンスのメリットがはるかに上がります。
メソッドが長くなるはずの情報源は、多くのレベルでが間違っているです。
なし、可読性を達成するための比較的短い方法が必要です。
機能のサイズについての単純なルールはありません。ガイドラインは、「一つのこと」を行う関数でなければなりません。これは少しばかりですが、経験があれば簡単になります。小さな関数は一般的に読みやすさにつながります。大きなものが必要になることがあります。
メソッド呼び出しのオーバーヘッドが気になるのは時期尚早な最適化です。
いつもと同じように、良いバランスを見つけることです。最も重要なことはのメソッドが1つしかないことです。長いメソッドは複数のことをする傾向があります。
まず、メソッド数レベルでパフォーマンスを微調整することは間違いありません。測定可能なパフォーマンス上のメリットはほとんどありません。数百万回もの時間をかけて呼び出されているメソッドがある場合にのみ、アイデアかもしれませんが、必要になる前に最適化を開始しないでください。
メソッドの目的を明確にする短い簡潔なメソッドに固執する必要があります。これは、読みやすいコードを提供し、理解しやすくなり、コードの再利用を促進します。
サイジング方法をガイドする最良の基準は、です。です。すべてのメソッドを完全に単体テストできれば(実際には! - )、あなたのコードはかなり良いと思われます。あなたがテストをすることを躊躇するならば、あなたのコードはおそらく普通ではないようです。メソッドを完全にテストすることが難しい場合、そのメソッドは "大きすぎる"可能性が高い - あまりにも多くのことをしようとするため、読み込みとメンテナンスが難しい(ひどくテストされているため、バグ)。
コードを書くときに考慮すべき最も重要なコストはメンテナンスです。 多くの場合,多くの場合、パフォーマンスの問題を修正するよりも、アプリケーションを維持してバグを修正する時間がかかります。
この場合、大量の扱いにくい方法を維持するコストと比較すると、メソッドを呼び出すにはほとんど意味がありません。小さな簡潔な方法は、維持し理解することがより容易である。さらに、メソッドを呼び出すコストは、アプリケーションに大きな影響を与えることはほとんどありません。そして、そうであれば、プロファイラを使用してアサートすることしかできません。開発者は、パフォーマンスの問題を事前に特定することに悪い知られている。
一般的に言えば、パフォーマンスの問題が特定されると、簡単に修正できます。メソッドまたはより重要なことにコードベースを保守可能にすることは、はるかに高いコストです。
個人的には、それらを書いている人がよく書きます(2つの改行で区切られたすべてのサブタスクと素敵なコメントなど)限り、長いメソッドを恐れていません。また、識別は非常に重要です。 )。 実際、多くの場合、それらを好むことさえあります(たとえば、シーケンシャルロジックで特定の順序で処理するコードを書くとき)。
また、長い方法を100個に分割すると、読みやすさが向上する(他の人が示唆するように)理由が分かりません。反対側のみ。コード内で何が起こっているのかを完全に把握するために、どこにでもジャンプしてメモリ内にコードを保持するだけです。コメント、不完全な関数名、多くの同様の関数名の可能性の欠如とそれを組み合わせると、混乱のための完璧なレシピがあります。 また、メソッドのサイズを減らそうとしている間にもう一方の目的を達成することができます:たくさんのパラメータを取るかもしれないたくさんのクラスとたくさんの関数を作成する。私はこれが読みやすさを向上させるとは思っていません。特に、各クラス/メソッドが何をしているのかわからないプロジェクトの初心者のために。
「機能は「あるべきこと」は非常に主観的です」という要求。 「一つのこと」は、「同じもの」のための仕事のトンを行うまで、変数を1つ増やしているかもしれません。
私のルールは再利用性のみです: 同じコードを複数の場所に何度も表示しないでください。このような場合は、新しい機能が必要です。 残りはすべて哲学的な話です。 「なぜあなたのメソッドを大きくするのですか」という質問では、「コードが単純ならばどうですか?」と返答します。
(ちょっと私の意見 - あなたが好きなだけダウン投票)